使用公共主题标签显示来自多个用户的推文

时间:2012-12-16 20:05:05

标签: php regex api twitter

我正在构建一个程序,该程序使用公共主题标签显示特定用户组的Twitter提要。该程序从表单中的用户输入获取用户名数组和主题标签。我正在使用正则表达式(我不太喜欢的东西)来清除包含主题标签的推文,然后我想回应一下。但是,该计划目前尚未运作。这是我的工作:

    <?php
        $hash = $_GET['hash'];
        $users = $_GET['users'];
        $users = str_replace(" ", "", $users);
        $hash = str_replace(" ", "", $hash);
        $users = explode(",",$users);
        $regex = "/^[#]+[a-zA-Z0-9_]+[ ]$/";
        $url = 'http://search.twitter.com/search.json?q='.$user.'&lang=en&rpp=100';

        foreach($users as $user){
        $jsontwitter = file_get_contents($url);
        $twitter = json_decode($jsontwitter, true);
        $twittertext = $twitter["results"];

        if(preg_match($regex, $twittertext['text'])){
        foreach($twittertext as $text){
        echo '<a href="http://twitter.com/'.$text['from_user'].'">@'.$text['from_user'].'</a>: '.$text['text'].'<br>';
            }
          }
        }
    ?>

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

你应该先纠正错别字。您的q =变量为空,因为第8行上的变量未在上面定义。看来你可能想在那里使用'$ users',如第3行所定义。我将从命令行测试(如下所示),在第2行和第3行设置静态变量。将print语句放在最后以确定你的失败点。

$ php test.html
警告:file_get_contents(http://search.twitter.com/search.json?q=&lang=en&rpp=100):无法打开流:HTTP请求失败! HTTP / 1.0 403禁止

答案 1 :(得分:0)

在朋友的帮助下弄明白了。 $ url变量需要在for循环中才能使用定义的$ user变量运行搜索。从那里,json被返回,解码,结果通过另一个for循环运行,以隔离包含指定主题标签的单个推文,使用if语句中的正则表达式。然后,这些推文被呼出。另外,处理正则表达式的方式不正确 - 它正在查找以#开头并包含任何字符的字符串,以空格结尾。应该查找一个字符串,其中包含#的任意位置,后跟$ hash变量,后跟一个空格。

最终的工作脚本:

<?php
$hash = $_GET['hash'];
$users = $_GET['users'];

$users = str_replace(" ", "", $users);
$hash = str_replace(" ", "", $hash);
$users = explode(",",$users);

$regex = "/($i)#". $hash ."/";


foreach($users as $user){

    $url = 'http://search.twitter.com/search.json?q='.$user.'&lang=en&rpp=100';
    $jsontwitter = file_get_contents($url);
    $twitter = json_decode($jsontwitter, true);
    $twittertext = $twitter["results"];

    foreach($twittertext as $text){
        if(preg_match($regex, $text['text'])){
            echo '<a href="http://twitter.com/'.$text['from_user'].'">@'.$text['from_user'].'</a>: '.$text['text'].'<br>';

        }
    }
}       

?>