Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得3200条推文(Twitter API 1.1)_Php_Curl_Twitter_Twitter Oauth - Fatal编程技术网

Php 如何获得3200条推文(Twitter API 1.1)

Php 如何获得3200条推文(Twitter API 1.1),php,curl,twitter,twitter-oauth,Php,Curl,Twitter,Twitter Oauth,经过大量的尝试和错误,我终于设法用Twitters的新API(版本1.1)获取推文。我正在使用PHP TwitterOauth库。尽管我能收到推特,但有两件事我不明白 状态/用户时间线的限制为200条推文。如何循环搜索结果以获取最多3200条tweet?我读过一些关于发出多个GET请求的文章,但我不知道该怎么做 似乎获取的tweet的数量随机变化,实际上很少达到参数“count”中指定的数量。为什么呢 我的应用程序只允许访问者键入用户名并获取该用户的推文。这是我的密码 if (isset($_G

经过大量的尝试和错误,我终于设法用Twitters的新API(版本1.1)获取推文。我正在使用PHP TwitterOauth库。尽管我能收到推特,但有两件事我不明白

  • 状态/用户时间线的限制为200条推文。如何循环搜索结果以获取最多3200条tweet?我读过一些关于发出多个GET请求的文章,但我不知道该怎么做

  • 似乎获取的tweet的数量随机变化,实际上很少达到参数“count”中指定的数量。为什么呢

  • 我的应用程序只允许访问者键入用户名并获取该用户的推文。这是我的密码

    if (isset($_GET['user'])) {
       $user = $_GET['user'];
       $content = $connection->get("statuses/user_timeline", array('count' => 200, 'exclude_replies' => true, 'screen_name' => $user));?>
    
       $j = 0;
       foreach ($content as $tweet) {
          echo $j.' '.$tweet->text. '<br />';
          $j++;
       } 
    }
    
    if(isset($\u GET['user'])){
    $user=$_GET['user'];
    $content=$connection->get(“状态/用户时间线”,数组('count'=>200,'exclude\u repress'=>true,'screen\u name'=>$user));?>
    $j=0;
    foreach($tweet内容){
    回声$j.'.$tweet->text.
    ; $j++; } }
    更新:在尝试了下面Queremy的建议后,我想出了一个看起来很难看的“解决方案”,它有几个主要缺点。至少它显示了3200条推文(以及一些重复的推文)的最大数量。如果所讨论的推特帐户的推特少于3200条,结果看起来会很奇怪。不管怎样,我只是想分享一下,如果它能给我灵感的话

    if (isset($_GET['user'])) {
        $user = $_GET['user'];
    
        $content = $connection->get('statuses/user_timeline', array(
        'count' => 200, 'exclude_replies' => true, 'screen_name' => $user, 'include_rts' => 1
    ));
    
        $x = 0;
        while ($x < 15) {
            $text = array();
    
            foreach ($content as $tweet) {
                $text[] = $tweet->id_str;
                echo $tweet->text.'<br />';
            }
    
            $last_tweet = end($text);
    
            $content = $connection->get('statuses/user_timeline', array(
        'count' => 200, 'exclude_replies' => true, 'screen_name' => $user, 'include_rts' => 1, 'max_id' => $last_tweet
    ));
            foreach ($content as $tweet) {
                echo $tweet->text.'<br />';
            }
            $x++;
        }
    }
    
    if(isset($\u GET['user'])){
    $user=$_GET['user'];
    $content=$connection->get('status/user\u timeline',数组(
    “计数”=>200,“排除回复”=>true,“屏幕名称”=>$user,“包括rts”=>1
    ));
    $x=0;
    而($x<15){
    $text=array();
    foreach($tweet内容){
    $text[]=$tweet->id\u str;
    echo$tweet->text.“
    ”; } $last_tweet=end($text); $content=$connection->get('status/user\u timeline',数组( “计数”=>200,“排除回复”=>true,“屏幕名称”=>$user,“包括rts”=>1,“最大id”=>$last\u tweet )); foreach($tweet内容){ echo$tweet->text.“
    ”; } $x++; } }
    这可能有点贵,但我认为可能(你可以测试类似的东西)


    谢谢,看起来很有希望。我只是快速测试了它,最后一行显示了一个错误:
    试图获取非对象的属性。。。未定义的偏移量:-1
    。我不明白那一行是做什么的,所以我不知道如何解释错误消息。我将您添加到答案中的代码放在了其余代码之后。两个备选方案都只显示空数组:(另外,我在尝试删除@符号后收到了同一行的新错误消息):“致命错误:无法将stdClass类型的对象用作数组”尝试将
    $content
    转换为数组,执行
    $content=(数组)$content;
    我无法让它正常工作。我应该在什么时候尝试将
    $content
    转换为数组?我终于明白了你在做什么,并想出了类似的方法,尽管更加丑陋,表现也不太好。我在上面发布了代码。
    $contents = array();
    $limit = 3200;
    $max_id = null;
    for ($count = 200; $count < $limit; $count += 200) {
        if (null !== $max_id && $max_id == '') {
            break;
        }
    
        $content = $connection->get('statuses/user_timeline', array(
            'count' => $count, 'exclude_replies' => true, 'screen_name' => $user,
            'max_id' => $max_id
        ));
        $contents[] = $content;
        // this indicates the last index of $content array
        $max_id = $content[count($content) - 1]->id_str;
    }
    
    // option 1, makes $max_id NULL silently
    @ $max_id = $content[count($content) - 1]->id_str;
    
    // option 2, search for last index of array
    if (count($content)) {
        $last_tweet = end($content);
        $max_id = $last_tweet->id_str;
    } else $max_id = null;