API1.1になってしばらく経ちましたが、
どうもいつの間にかリプライとTL反応ができなくなっていました。

EasyBotter2.1.2版なのに、
必死にググっても解決策がみつからなかったのですが、
ようやく解決策を見つけたので、ここに書きとめておきます。

Consumer key
Consumer secret
Access Token
Access Token Secret

を使って、自動ツイートができることが前提です。



問題は、
mentions_timeline と home_timeline の
使い方にありました。


一般的には、

$url = "http://api.twitter.com/1.1/statuses/mentions_timeline.json?";       

と、"1.1" の変更だけでよかったのです。


■修正前
    function getReplies($since_id = NULL){
        $url = "http://api.twitter.com/1.1/statuses/mentions_timeline.json?";       
        if ($since_id) {
            $url .= 'since_id=' . $since_id ."&";
        }
        $url .= "count=100";

        $response = $this->_getData($url);
        if($response["errors"]){
            echo $response["errors"][0]["message"];              
        }                  
        return $response;
    }       


とまぁ、こんな感じなのですが、

$url の中身を見ると、
"http://api.twitter.com/1.1/statuses/mentions_timeline.json?count=100" となっており、

一見するとこれでよさそうなのですが、

どうもこれがまた変な感じで、
同じツイッターなのに、できるアカウントと、できないアカウントが存在します。

できない場合、つまり、エラーが起こった場合、

code = 32;
message = “Could not authenticate you”;

と、怒られてしまいます。


日本語では認証エラーという意味なんですが、
きちんと、自動ツイートはできているので、認証がエラーではなかったのです。


答えは、"?"を使ってはいけなかったのです。

つまり、この場合は、
”?count=100"の部分があるがためにエラーになっていたわけです。

パラメーターとして渡してあげないといけなかったわけですね。

渡そうとしても、
渡している部分が、

$response = $this->_getData($url);

となっているので、渡しようがないじゃないかと思われるかもしれませんが、
そういう時は仕方がないので、新しく関数を作ってしまいましょう。


--------------------
■修正後

1.

EasyBotter.php
最下部

//============================================================
//基本的なAPIを叩くための関数
//============================================================
    function _setData($url, $value = array()){
        $this->OAuth_Consumer_build();//ここでHTTP_OAuth_Consumerを作り直し
        return json_decode($this->consumer->sendRequest($url, $value, "POST")->getBody(), true);
    }   

    function _getData($url){
        $this->OAuth_Consumer_build();//ここでHTTP_OAuth_Consumerを作り直し
        return json_decode($this->consumer->sendRequest($url, array(), "GET")->getBody(), true);
    }   


この下に、

    function _getData_2($url, $param){
        $this->OAuth_Consumer_build();//ここでHTTP_OAuth_Consumerを作り直し
        return json_decode($this->consumer->sendRequest($url, $param, "GET")->getBody(), true);
    }   

を追加。



2.

その下、

getReplies()、getFriendsTimeline() 関数を下記のように書き換える。
(比較できるように、オリジナルソースをコメントアウトしています)

    function getReplies($since_id = NULL){
//        $url = "http://api.twitter.com/1.1/statuses/mentions_timeline.json?";        
        $url = "http://api.twitter.com/1.1/statuses/mentions_timeline.json";        

    $param = Array();   // 追加

        if ($since_id) {
//            $url .= 'since_id=' . $since_id ."&";
        $param = array_merge($param, array("since_id"=> $since_id));
        }
//        $url .= "count=100";
        $param = array_merge($param, array("count"=> 100));

//        $response = $this->_getData($url);
      $response = $this->_getData_2($url, $param);
        if($response["errors"]){
            echo $response["errors"][0]["message"];               
        }                   
        return $response;
    }        

    function getFriendsTimeline($since_id = 0, $num = 100){
//        $url = "https://api.twitter.com/1.1/statuses/home_timeline.json?";
        $url = "https://api.twitter.com/1.1/statuses/home_timeline.json";

    $param = Array();   // 追加
                    
        if ($since_id) {
//            $url .= 'since_id=' . $since_id ."&";
        $param = array_merge($param, array("since_id"=> $since_id));
        }        
//        $url .= "count=" .$num ;
        $param = array_merge($param, array("count"=> $num));

//        $response = $this->_getData($url);
        $response = $this->_getData_2($url, $param);
        if($response["errors"]){
            echo $response["errors"][0]["message"];               
        }                   
        return $response;
    }


-------------------

こんな感じです。


実は_getData($url, $param) とやっておいて、
呼び出し元を修正してもよかったけれど、
検証が大変なので、今回の方法が確実です。


いままで動かなくて困ってた皆様、
よろしければ、やってみてください。