こにしの日記

開発やマネジメント関連の話

TwitterAPIのstatuses/updateでは同じ内容のツイートを連続で投稿出来ないらしい

開発中に詰まったことをまとめておくための自分用のメモです。

 

時間もあるし色々作りたいものがあるので、手始めにTwitterbotを作ろうとしてます。

言語は仕事でも使ってるPHPを使用。

 

それにアフィリエイトのURL載せてお小遣いになればいいなあ的な狙い。

情報拾ってきて安定的に投稿できる仕組みができたらあとは放ったらかしで良いので効率良いかな、と。

安定稼働までに壁は色々あるだろうけども。

 

ざっくり今こんな段階。

 

Bot用のメアド作成
・Twitter登録
・Twitterのアプリ登録
・PHPからテストツイート←イマココ
・APIなどで投稿の元ネタを取得
・APIから投稿までの流れをつなげる
・データ取得から投稿までの仕組みをスケジュール化

 

 

自分は件名の内容で詰まりました。

 

codebird.phpでTwitter Bot前半 | Cutls Code Archives

こんな感じの記事をいくつか読んでbot用のものを書いて1回動かしてみたら普通に投稿できたんですよね。

で、「これは来たな」と思いながらもう1回走らせた時は何も投稿されない、と。

 

 

先週ぐらいにメインのアカウントでテストツイートしたことがあったのでそっちでも1回動かしてみたら投稿できました。

これはbot側のアカウントの問題かと思いキーの再生成とか色々試すもうまくいかず。

下記のことを実施してようやく原因究明&問題解決できました。

 

 

リファレンスを読む

POST statuses/update — Twitter Developers

Any attempt that would result in duplication will be blocked, resulting in a 403 error. A user cannot submit the same status twice in a row.

リファレンスの中にはこんなわかりやすい説明が。 

同じ内容を続けてツイートするなよ、とちゃんと注意されてました。

 

リファレンスぐらい最初から読んどけよ、って感じではあるんですがやっぱり英語でややこしい文章書かれてると取っつきにくいんですよね。

英語力つけると同時に英語慣れというか、 英文を積極的に読みに行く姿勢みたいなのも必要だなと感じました。

 

レスポンスを取得する

APIほぼ初体験ぐらいだったのでリファレンス読んだ後にレスポンス見たんですが、明確に「Status is a duplicate」って書かれてますね^^;

これ取得しないとあたかも何事もなかったかのようにタスクが流れていってしまうので、これは今後絶対やるようにしないとですね。


stdClass Object
(
    [errors] => Array
        (
            [0] => stdClass Object
                (
                    [code] => 187
                    [message] => Status is a duplicate.
                )

        )

    [httpstatus] => 403
    [rate] => 
)
    
おわりに

こんな感じで投稿内容を都度都度変えればちゃんと連携されました。

メインアカウントでは同じ内容でツイート出来てしまったのは、間にたくさんツイートがあったからなんですかね。

 

 

割としょーもないところで詰まってしまったけれども、最初なんでこのレベルは仕方ないと思って切り替えて、引き続き開発進めます。

今週末にはそれなりに動く形にはしたいです。(役に立つレベルにはまだなってないと思うけど^^;)

 

とりあえずリリース&公表するスタイルで行くのでなんとか間に合うよう頑張ります。