我在这个项目上工作已经有一段时间了。让我先解释一下这个目标:我们有四个Twitter帐户(与代码无关),我们办公室里有一个人花了几个小时除去每个帐户的互动。他按照1.提到我们帐户的任何人的手柄(或根据API的screen_name)记下2.收藏我们的推文3.转发我们的推文之一。我正在使用4个不同的文件(每个Twitter帐户一个),所以基本上只需要关注一个。
不必要的信息:我们正在检查最后#ff是什么时候被推文,因为在收集了所有句柄之后,我们办公室里的那个人发了回信说#ff谢谢你@foo @bar与我们互动。因此,一旦它在最近的推文列表中找到包含#ff的推文,它就会得到该推文的日期。简而言之,我们正在收集此日期之后的所有互动(在某种程度上是每周一次)。
<?php
require_once('./top.php');
// oAuth library
$twitter = new TwitterAPIExchange($valpo_settings);
// get recents
$string_recents = json_decode($twitter->setGetfield($getfield.$valpo_id)->buildOauth($url_recents, 'GET')->performRequest(), $assoc = true);
// get mentions
$string_mentions = json_decode($twitter->setGetfield($getfield.$valpo_id)->buildOauth($url_mentions, 'GET')->performRequest(), $assoc = true);
// get retweets
$string_retweets = json_decode($twitter->setGetfield($getfield.$valpo_id)->buildOauth($url_retweets, 'GET')->performRequest(), $assoc = true);
// error (recents)
if($string_recents["errors"][0]["message"] != "") {echo "<h1>error (recents)</h1><p>".$string_recents[errors][0]["message"]."</p>";exit();}
// error (mentions)
if($string_mentions["errors"][0]["message"] != "") {echo "<h1>error (mentions)</h1><p>".$string_mentions[errors][0]["message"]."</p>";exit();}
// error (retweets)
if($string_retweets["errors"][0]["message"] != "") {echo "<h1>error (mentions)</h1><p>".$string_retweets[errors][0]["message"]."</p>";exit();}
// filter recents
foreach($string_recents as $items_recents) {
// echo "<pre>";
// print_r($items_recents);
// echo "</pre>";
// filter hashtags
foreach($items_recents['entities']['hashtags'] as $items_hashtags) {
$hashtag_text = strtolower($items_hashtags['text']);
if ($hashtag_text == $hashtag && $vi != 1) {
$date = date('z', strtotime($items_recents['created_at']));
$time = date('H-i-s', strtotime($items_recents['created_at']));
$vi = 1; // prevents finding the date of previous tweets
}
}
}
// filter mentions
foreach($string_mentions as $items_mentions) {
if (date('z', strtotime($items_mentions['created_at'])) == $date && date('H-i-s', strtotime($items_mentions['created_at'])) >= $time || date('z', strtotime($items_mentions['created_at'])) > $date) {
$names[] .= $items_mentions['user']['screen_name'];
$vxm++;
}
}
// filter retweets
foreach($string_retweets as $items_retweets) {
echo "<pre>";
print_r($items_retweets);
echo "</pre>";
foreach ($items_retweets['entities']['user_mentions'] as $items_retweets_user) {
if (date('z', strtotime($items_retweets['created_at'])) == $date && date('H-i-s', strtotime($items_retweets['created_at'])) >= $time || date('z', strtotime($items_retweets['created_at'])) > $date) {
$names[] .= $items_retweets_user['screen_name'];
$vxr++;
}
}
}
// eliminates duplicate handles
$unames = array_unique($names);
// creates directory if needed
if (!is_dir("./".date('Y-m-d'))) {
mkdir("./".date('Y-m-d'), 0777, true);
}
$file = fopen("./".date('Y-m-d')."/".date('H-i-s')."-valpo.txt", "w");
foreach ($unames as $value) {
fwrite($file, '@'.$value.' ');
$unames_size += strlen($value) + 2; // + 2 accomadates for @ and a space
}
fclose($file);
$unames_size = ceil($unames_size / 140);
echo "
<div class='row'>
<div class='col x3'></div>
<div class='col x6'>
<span class='title'>ValpoLife</span>
<span class='info'>
<p><i class='fa fa-comments'></i> ".$vxm." <i class='fa fa-star'></i> ".$vxm." <i class='fa fa-retweet'></i> ".$vxr." <i class='fa fa-user'></i> ".count($unames)."</p>
<p><i class='fa fa-slack'></i> ".$hashtag." <i class='fa fa-calendar-o'></i> ".($curdate - $date)." days ago</p>
<p>Appoximately ".$unames_size." tweet(s) needed</p>
</span>
<a href='./index.php' class='button sec animated' target='blank'><i class='fa fa-chevron-left'></i></a><a href='./".date('Y-m-d')."/".date('H-i-s')."-valpo.txt' class='button pri animated' target='blank'><i class='fa fa-file-text'></i> View handles</a>
</div>
</div>
<footer>
© Ideas In Motion Media. All Rights Reserved.
</footer>
</div>
</body>
</html>
";
?>
以上是其中一个帐户文件的所有代码。正如您所看到的,它包括top.php,它只包含一些全局变量,html的标题和每个帐户的oAuth信息。现在一切正常,除了检索收藏夹和转推。提及工作正常,最近也是如此。我已经尝试了几件事来获得收藏或转推工作,但似乎没有做到这一点。我已经删除了上面收藏的代码,因为我更关心转发。如果需要收藏代码,请告诉我,因为我很乐意分享。谢谢你的帮助。
tl;dr
使用Twitter API,我已成功检索到最近的推文和任何提及我们的Twitter帐户的推文。现在我正在尝试检索喜欢或转发我们推文的人的姓名/句柄。
答案 0 :(得分:0)
可以获取转发推文的每个人的姓名。
https://dev.twitter.com/rest/reference/get/statuses/retweeters/ids
传递Tweet的ID,你会得到转发它的人的名单。
对于收藏夹,你不会喜欢这个答案。没有REST API可以让你看到谁喜欢推文。
只要您的推文被标记为收藏,您就可以使用Streaming API接收消息。
https://dev.twitter.com/streaming/overview/messages-types#Events_event