ツイッターのストリーミングAPIが401エラーで使えない!
ツイッターの「ストリーミングAPI」を使ってつぶやきを採取する実験をしているんですが、いつも使えてるAPIがいきなり使用不能になってしまいました・・。
私は「Phirehose」というPHPのライブラリでAPIを利用しているのですが、以下のようなエラーが出て接続失敗していまいます・・。
Phirehose: HTTP failure 1 of 20 connecting to stream: HTTP ERROR 401: Authorization Required (<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>\n<title>Error 401 Unauthorized</title></head><body><h2>HTTP ERROR: 401</h2><p>Problem accessing '/1.1/statuses/sample.json'. Reason:<pre> Unauthorized</pre></body></html>). Sleeping for 10 seconds.
なんだかツイッターの認証が「401」のエラーで失敗してるみたいですね・・。
いろいろググってみたところ、どうやらこのエラーの原因、私のサーバー(CentOS6)の時刻が狂っているせいみたいです。
たしかに、サーバに入って以下のようにdateコマンドで時刻を表示してみると、時計が一時間くらい狂っていました(状態もINITというあやしげな表記になっています・・)
# date Mon Jul 3 18:41:39 JST 2017 # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== hogege .INIT. 16 u - 1024 0 0.000 0.000 0.000
そこでntpdを再起動して時計の調整を試みます。
# service ntpd restart Shutting down ntpd: [ OK ] Starting ntpd: [ OK ]
しかし、ntpdを再起動しても時刻を調整してくれません、困りました・・。
ntpってなんだか難しいんですよね・・。
時刻が調整されるのにすごい時間がかかったり、時刻がズレすぎてると調整をしてくれなかったり、とっても複雑でよく分らない動きをするプロトコルみたいです・・。
# date Mon Jul 3 18:42:40 JST 2017 # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== hogegege 1.1.1.1 2 u 3 64 3 8.212 4530468 0.071
仕方がないので手動で時刻を設定する作戦に打って出ます。
手元の時計を見計らって「えいっ!」とdateコマンドを押し込みます(ntpってこういうことしても大丈夫なんでしたっけ・・?)
# date -s "07/03 20:03 2017" Mon Jul 3 20:03:00 JST 2017 # service ntpd restart Shutting down ntpd: [ OK ] Starting ntpd: [ OK ] # date Mon Jul 3 20:03:15 JST 2017 # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== hogegege 1.1.1.1 2 u 11 64 1 8.083 -96.873 0.000
上記のように手動で強引に時刻を修正したところ、無事にツイッターAPIが使えるようになりました。
NTPもとくエラーとか吐かずに無事に動いてくれている様子です。
たぶんこれでよかったんだと思います、たぶん・・。
※P.S.
先日、ntpとはまた別の理由で、ストリーミングAPIが使用不能になってしまいました・・。
原因がまだはっきり特定できていないのですが、おそらく私のツイッターアカウントのメールアドレスの設定を変えてしまったことによって、なにかエラーが発生してしまった可能性があります・・。
ツイッターって、ひょっとしてメールアドレスを変えると、認証のための「Access Token」や「Access Token Secret」の値が変更される仕様になっているんでしょうか?ツイッターの開発者ページにログインして確認したところ、以前使っていた値が新しく変更されてしまっている気がします・・。
新しく発行された「Access Token」や「Access Token Secret」の値を使用してアクセスしたところ、無事にAPIが使えるようになりました・・。
なんだかモヤモヤしますが、とりあえずはこれで良しとします・・。