【问题标题】:Retrieving a list of users who interacted with a Twitter account?检索与 Twitter 帐户交互的用户列表?
【发布时间】:2014-12-13 13:37:03
【问题描述】:

我在这个项目上工作了很长时间。让我先解释一下目标:我们有四个 Twitter 帐户(与代码无关),我们办公室里有一个人会花几个小时检查每个帐户的交互。他记下以下任何人的句柄(或根据 API 的 screen_name) 1. 提及我们的帐户 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;博士

使用 Twitter API,我成功地检索了最近的推文以及任何提及我们 Twitter 帐户的推文。现在我正在尝试检索收藏或转发我们的推文的人的姓名/句柄。

【问题讨论】:

    标签: php twitter


    【解决方案1】:

    可以获取所有转发推文的人的姓名。

    https://dev.twitter.com/rest/reference/get/statuses/retweeters/ids

    将推文 ID 传递给它,您将获得转发推文的人的列表。

    对于收藏夹,您不会喜欢这个答案。没有 REST API 可以让您查看谁收藏了一条推文。

    每当您的推文被标记为收藏时,您都可以使用 Streaming API 接收消息。

    https://dev.twitter.com/streaming/overview/messages-types#Events_event

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 1970-01-01
      • 2011-09-08
      • 2023-02-15
      • 2018-08-19
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多