检索与Twitter帐户交互的用户列表?

时间:2014-10-17 21:57:57

标签: php twitter

我在这个项目上工作已经有一段时间了。让我先解释一下这个目标:我们有四个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." &nbsp; <i class='fa fa-star'></i> ".$vxm." &nbsp; <i class='fa fa-retweet'></i> ".$vxr." &nbsp; <i class='fa fa-user'></i> ".count($unames)."</p>
                        <p><i class='fa fa-slack'></i> ".$hashtag." &nbsp; <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>
                &copy; Ideas In Motion Media. All Rights Reserved.
            </footer>
        </div>
    </body>
</html>
";
?>

以上是其中一个帐户文件的所有代码。正如您所看到的,它包括top.php,它只包含一些全局变量,html的标题和每个帐户的oAuth信息。现在一切正常,除了检索收藏夹和转推。提及工作正常,最近也是如此。我已经尝试了几件事来获得收藏或转推工作,但似乎没有做到这一点。我已经删除了上面收藏的代码,因为我更关心转发。如果需要收藏代码,请告诉我,因为我很乐意分享。谢谢你的帮助。

tl;dr

使用Twitter API,我已成功检索到最近的推文和任何提及我们的Twitter帐户的推文。现在我正在尝试检索喜欢或转发我们推文的人的姓名/句柄。

1 个答案:

答案 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