【问题标题】:Twitter API Search Get Tweet created_at TimeTwitter API 搜索获取推文 created_at 时间
【发布时间】:2018-03-15 19:26:11
【问题描述】:

您好,我目前正在使用推特 API,但无法获取推文的 created_at 日期。返回的日期似乎是我请求 API 的日期,而不是发布推文的日期。

我能够得到这个日期,但如果它是我调用 API 的日期,它对我没有用处。 API 返回了 100 条推文,而且每个 created_at 日期都完全相同?

这是我写的代码:

$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
$content = $connection->get("account/verify_credentials");
$tweets = $connection->get("search/tweets", ["q" => "#TRIG", "result_type" => "recent", "count" => 100]);
print_r($tweets);

我正在使用这行代码来获取 created_at 日期:

$tweetCreatedTime = $tweets->statuses[0]->created_at;

这是我用来统计推文的所有代码:

$timeHourAgo = time() - 3600;
$count = 0;
$tweetCoinCount = [];

for ($i=0; $i < round((count($coinSymbol) * 0.06)); $i++) { 
$tweets = $connection->get("search/tweets", ["q" => "#" + $coinSymbol[$i], "result_type" => "recent", "count" => 100]);
$tweetsCount = count($tweets->statuses);
for ($t=0; $t < $tweetsCount; $t++) { 
    $tweetCreatedTime = $tweets->statuses[$t]->created_at;
    $tweetCreatedTimestamp = strtotime($tweetCreatedTime);
    if ($tweetCreatedTimestamp > $timeHourAgo) {
        $count = $count + 1;
    }
}
$tweetCoinCount[$coinSymbol[$i]] = $count;
$count = 0;
}

$coinSymbol 只是我使用另一个 API 提取的一串不同的货币

所有返回的推文都具有相同的 created_at 日期。

【问题讨论】:

  • 我刚试过它和它返回的差异日期,只有第一个是Wed Oct 04 11:24:19 +0000 2017,你能展示你是如何循环浏览推文的吗?
  • 您只获得$tweetCreatedTime = $tweets-&gt;statuses[0]-&gt;created_at; 的第一条推文的日期,您需要遍历所有推文以获取每条推文的日期。
  • 我已经编辑了我的问题,向您展示我使用的循环
  • 如果有更好的方法来计算推文,我也很想听听,因为我这样做的方式真的很慢
  • @LukeRayner 添加了答案

标签: php api twitter


【解决方案1】:

我建议你重写你的代码,你有像"#"+$coinSymbol[$i] 这样的错误。 . 是 PHP 中的字符串连接。

好的,所以如果你有一个符号数组,你可以使用 foreach 遍历它们,然后获取你的推文计数。请注意,如果您有 100 多个货币符号,您很快就会达到 twitters API 限制。

$timeHourAgo = time() - 3600;
$tweetCoinCount = [];
$coinSymbol = [
    'TRIG',
    'BTC',
    'ETH'
];

foreach ($coinSymbol as $symbol) {
    $tweets = $connection->get("search/tweets", ["q" => '#'.$symbol, "result_type" => "recent", "count" => 100]);

    $tweetCoinCount[$symbol] = 0;
    foreach ($tweets->statuses as $tweet) {
        if (strtotime($tweet->created_at) > $timeHourAgo) {
            $tweetCoinCount[$symbol]++;
        }
    }
}

print_r($tweetCoinCount);
Array
(
    [TRIG] => 0
    [BTC] => 15
    [ETH] => 15
)

【讨论】:

  • 感谢您的帮助!我真的很感激 :) $coinSymbol 数组有大约 1000 个硬币,我每小时请求 api 的次数不能超过 100 次。您对此有什么建议吗?
  • 我知道我现在不应该使用多个应用程序,因为如果没有企业版,我无法找到另一种方法。这就是为什么我只使用 $coinSymbol 数组的一部分,而每个应用程序每个会执行 100 个请求
  • 可能最好的办法是将符号按限制拆分,然后通过 cron 作业分批执行,并通过增加数据库中的 query_count 列等来跟踪查询。1k 个符号是反正要花点时间。
  • 另外,设置几个服务器和 twitter 帐户并将数据聚集到一个点。 (虽然我从来没有说过);p
  • 好的,谢谢,我只是想要前 10 个推文符号 有没有办法让请求只得到这些?我不认为这是可能的,但我想我会问。现在我必须遍历每个符号并获得计数,但如果我只能请求前 10 名,那将是惊人的
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多