I'm KUITARIDER.

がりゅうさんのサイキックミラクルブログ

1/15のTwitterAPI仕様変更

センター休みをデブデブ満喫していたらあることに気づいた

botが動いてない<

原因を探るためかねのbotのコンソールを見てみると、ちゃんとUserstreamには繋げていてツイートも流れてくるのだがリプライ反応だけは100%失敗している。

しかも、このプログラムではサーバーから返ってきたオブジェクトのcontentをそのままエラーメッセージとして表示しているのだが、それがない。これはおかしい。

 

ここらへんで

「そういえば昨日あたりにTwitterの仕様変更がどうとかのRTが回ってきたな」

と思い出したため色々調べてみると、こんなものが

Restricting api.twitter.com to SSL/TLS traffic https://dev.twitter.com/discussions/24239

 

内容は記事タイトル通りで、api.twitter.comへのアクセスにSSLが必須になったらしい。

http://をhttps://に変えるだけだとかいうハナシだが、思考停止でライブラリを使ってるタイプのデブにはそれすらも厳しい

 

ということなので、人の力に頼ることにしてとにかく検索検索

すると、

search_twitterizer

なんてものを見つけたのでこちらから修正済みのライブラリを入手

(今までgithub見てなかったという事実は内緒)

デフォルトでは.dllが入ってなかったのでTwitterizer2.csprojを開いて自分でビルド。

できた.dllファイルのうちいつもの3つを、かねのbotで参照している既存のものと置き換える

(今回変更があったのはTwitterizer2.dllだけなのだがこれだけ置き換えてもバージョンの問題とかなんとかで動かなかった)

そしたら、

jane

動いた。

 

ここまで2時間くらい

他の2つのプログラムも全部参照設定変えて再起動。

はい終わり

 

 

実は終わりじゃなかった

翌日にまたセンター休みをデブデブ満喫していると、またくさいことに気づいてしまった

>ふぁぼが動いてない<

いや確かにライブラリで修正されてたのはTwitterStatus.csとかだけだから動いてなくてもおかしくないんだけど

しかしデバッグで確認してみると、ふぁぼについてもエンドポイントはちゃんとhttps://~~~~に修正されていたのでやっぱり動いてないのはおかしい?

まあよくわからんので公式のリファレンスを確認してみましょうと。

https://dev.twitter.com/docs/api/1.1/post/favorites/create

↓こうかいてある

Resource URL

https://api.twitter.com/1.1/favorites/create.json

ん?今のプログラム上ではこうしてある https://api.twitter.com/1.1/favorites/create/1227442655.json (←数字は適当)

 

└(┐┘)┌URL違ったわ┐(└┌)┘

  API1.0のリファレンスとかも確認してみると、API1.0、もしくはAPI1.1でも非SSLなら/createの後にstatusIDをつけてエンドポイントにしていたらしい 今回API1.1+SSLになってしまったからそうではなくなったと。 という結構重要な変更点があるのにもかかわらず例のgithubでは修正版が上がっていない

(これだからふぁぼを重要視しない界隈は)

まともにプログラミングを勉強してないため人様が修正してくれない時点で大抵お手上げなのだが、一応それなりに頑張ってみることに

 

つまりは、エンドポイントはあくまでも

https://api.twitter.com/1.1/favorites/create.json

として固定で、パラメータとしてstatusIDを付属させればいい。

 

ふぁぼ周りのメソッドをたどっていくと分かるが、途中でTwitterizer.Core.TwitterCommandのコンストラクタが呼び出される。

このTwitterizer.Core.TwitterCommandクラスにはRequestParametersというメンバがあり、コンストラクタ中でもそれをsetしてくれているようだ。

(ただ実際の実装ではコンストラクタはパラメータらしきものは何一つ引数としてとっていないので、空のオブジェクトをsetする記述になっている)

おそらくこのRequestParameters(Dictionary型)にパラメータを渡せばいいので、引数をオーバーロードするように書き換え、そのメソッドを使うCreateFavoriteCommand.csでもDictionary型のパラメータを渡すように書き換えた。 パラメータはたぶん["id",(statusID)]の辞書配列にすればいい(リファレンスを見る限り)

このようにライブラリを書き換えて、それをビルドして、プログラム(今度は334Rankerで試した)の参照設定を変えて、ふぁぼを試した。

しかし

34: Sorry, that page does not exist

これもうわかんねえな

↑ そんなこともあったな(郷愁)

普通にクエリパラメータとしてstatusIDを渡せばいいらしい

つまりエンドポイントの最後はfavorites/create.json?id={0}.jsonになる

というわけで、ライブラリ中のCreateFavoriteCommand.csの該当箇所をそう書き換えて終了。ちゃんとふぁぼできました。

ん、うまくいった。

 

そういえば: Easybotterの方は直してないからかねのbotの定期ツイット止まってるな…