Instagram 媒体搜索时间戳问题

Posted

技术标签:

【中文标题】Instagram 媒体搜索时间戳问题【英文标题】:instagram media search timestamp issues 【发布时间】:2015-05-08 14:11:06 【问题描述】:

我正在使用 instagram 的媒体搜索 api

https://api.instagram.com/v1/media/search?lat=8.51&lng=115.239394&MAX_TIMESTAMP=xyz&MIN_TIMESTAMP=abc&client_id=my_client_id

现在我在 for 循环下调用这个 api,并在每次迭代中更改最小和最大时间戳的值。这样我就可以获得该时间范围内的图像。

我面临的问题是我在每次迭代中得到相同的结果(或一组图像)。所以更改时间戳对结果没有影响。

是因为缓存吗?还是 Instagram 不允许这样的迭代请求?或者还有其他方式,例如分页或其他东西来提出这样的要求?

这里是代码(在python中):

import urllib2
import datetime
import time
import json

clientId = 'ef63de4634b344e3856b4f4138a8db56'
city = "Bali"
baliLat = '8.51'
baliLong = '115.239394'
distance = 1000

def callApi(startStamp, endStamp):
    searchStr = 'https://api.instagram.com/v1/media/search?lat=' + baliLat + '&lng=' + baliLong + '&client_id=' + clientId + '&MAX_TIMESTAMP=' + str(endStamp) + '&MIN_TIMESTAMP=' + str(startStamp) + '&distance='  + str(distance) + '&count=10'
    print searchStr
    response = urllib2.urlopen(searchStr)
    res = json.loads(response.read())
    return res

if __name__ == "__main__":
    # call instagram api for 1 year for each month for 1st week.
    # compare the dates of creation for each month.
    start = '1/05/2014'
    startDate = datetime.datetime.strptime(start, '%d/%m/%Y')
    count = 0
    result = 
    while count < 12:
        endDate = startDate + datetime.timedelta(days=7)
        minStamp = time.mktime(startDate.timetuple())
        maxStamp = time.mktime(endDate.timetuple())
        res = callApi(minStamp, maxStamp)
        result[str(startDate)] = res
        startDate = startDate + datetime.timedelta(days=30)
        count += 1
    f = open('out-y.json', 'w')
    f.write(json.dumps(result))
    f.close()

【问题讨论】:

你想争取多少天? 7 天(每个月)。没有交叉路口。还有什么我应该注意的吗? 发布代码,如果你调用太多,它不应该给你相同的结果,你的代码中的某些东西可能是 我添加了我正在使用的代码。 【参考方案1】:

MAX_TIMESTAMPMIN_TIMESTAMP 应为小写:max_timestampmin_timestamp

Instagram 上的 api 文档以大写形式显示 params,它具有误导性,应该全部小写。

【讨论】:

我尝试使用小写的 max_timestamp 和 min_timestamp 但它们不起作用。所以我求助于使用至少可以工作的大写字母,但不正确。 如果你使用大写,那么它会被忽略并且你正在获取最新的照片,如果你使用小写并且你什么都没有,那么这是正确的,时间范围内没有照片或者你的时间值是不正确,请在此处查看带有您的时间的照片:gramfeed.com/instagram/map【参考方案2】:

上周我在同一个问题上苦苦挣扎,我认为我的问题源于 time.mktime() - 这假设日期设置为当地时区,而不是 Instagram 数据所在的 UTC/GMT 时间基于。尝试用 calendar.timegm() 替换所有 time.mktime() 调用,看看是否能解决问题 - 似乎解决了我的问题。

【讨论】:

不,更改并没有为我解决问题。我的代码在那里,你能不能用 calendar.timegm 替换 time.mktime 看看它是否有效。【参考方案3】:

Instagram 的 API 使用以秒为单位的时间戳,而不是毫秒。将所有时间戳除以1000

【讨论】:

试过这个。不工作。连续几个月的两次调用仍然得到相同的结果。

以上是关于Instagram 媒体搜索时间戳问题的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql:如何为postgres中的相同时间戳选择“媒体”列中的最大值?

时间戳的休眠搜索查询返回空列表

R RODBC sqlQuery 和 WHERE 子句搜索时间戳

Oracle:两个时间戳之间的搜索不起作用

PostgreSQL在没有时区的时间戳类型的表中搜索

我使用时间戳/时基使用 libav(ffmpeg)进行帧搜索/读取有啥问题?