Python:字符串变量在JSON中无法识别,但硬编码字符串有效(Instagram API)

时间:2016-03-14 07:11:49

标签: python json django instagram instagram-api

我遇到了与解析Instagram API的JSON响应有关的问题,但我相信它是一般的Python事物(我是一个n00b)。

我正在构建一个Django应用。当经过身份验证的用户在Instagram上发表评论时,我想存储一些与之相关的数据。当我在底部的for循环中对用户名进行硬编码时(即sub_item['from']['username'] == 'hansolo'),下面的代码可以正常工作。

但是,当我用存储相同字符串的变量替换硬编码的用户名时,该函数无法找到并保存任何新数据。即sub_item['from']['username'] == ig_username, where ig_username = 'hansolo'

if form.is_valid(): 
  instance = form.save(commit=False)
  user = request.user
  instance.user = user
  ig_username = str(user)
  print ig_username # for debugging
  print 'hansolo' # for debugging

  client_id = "[hidden]"
  client_secret = "[hidden]"
  access_token = "[hidden]"
  api = InstagramAPI(client_id=client_id, client_secret=client_secret, access_token=access_token)

  # Get list of recently liked media from authenticated user
  api_call_likes = 'https://api.instagram.com/v1/users/self/media/liked?access_token=' + access_token

  r = requests.get(api_call_likes)
  json_data = r.json()

  for item in json_data['data']:
    for sub_item in item['comments']['data']:
        if sub_item['from']['username'] == ig_username and 'keyword' in sub_item['text']:
            # save some data

当我在终端中打印ig_username变量(第6行)时,它会打印exac与硬编码用户名相同的字符串(第7行,即hansolo)。

为什么字符串变量会失败,但硬编码字符串会起作用?通过"失败,"我的意思是找不到并保存数据。

1 个答案:

答案 0 :(得分:2)

如果要与用户名进行比较,则应该这样做,而不是与User对象的字符串表示进行比较;它们可能是相同的,但它们可能不是。

ig_username = user.username

此外,与您的问题无关,但您应该使用Instagram Python库,这使得这类事情变得更容易。