やったこと

webサービスを作るときに考えたことを垂れ流します

ツイッターのストリーミング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もとくエラーとか吐かずに無事に動いてくれている様子です。

たぶんこれでよかったんだと思います、たぶん・・。