Aikの技術的な進捗部屋

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

TwitterAPI使ってみた その2(失敗プログラミング編)

その1(環境構築編)はこちら
その3(簡単なプログラム作ってみた編)はこちら

※筆者がTwitter APIに触れたのは2018/12/06〜2018/12/08くらいです。
TwitterAPIは仕様変更がたびたび起こっているみたく…。
今のTwitterAPIの仕様とは色々と異なる場面もあるかもしれません。ご了承ください。

前回のおさらい

前回までで、TwitterAPIを使うための「APIキー」を入手するところまでやりました。
今回はその続き…実際のコーディング段階に入っていこうと思います。

APIを使って色々しよう

APIキーを取得した!さぁコーディングだ!!
…と思ったのですが、次に何をすればいいのやら…。

まぁこんな時はGoogleさんですね。
「TwitterAPI」で、色々検索し記事を見ていく事にしました。

同じ事をなされた方のを参考にプログラミング

ググっていくと何と、自分がやろうとしている事とほぼ全く同じ事をなされた記事を発見しちゃいました!
どうやらここの記事主さんはNode.jsを使っているみたいで…。
http://pppurple.hatenablog.com/entry/2016/04/02/204119

おまけに、ここの記事にはソースコードまで書かれてあり…何という神…。
そしてそのソースコードもGithubに置かれているっていう。もうもう何という…。
最大限の感謝をしつつ、この記事のソースコードほぼほぼ丸コピペ参考にしながら…。

無事にソースコードを完成させることができました!
早速走らせましょう!

(あ、先に言っておくと…今回のこれはうまく動きませんでした。)
(なので、ソースコード掲載は省略させていただきます。まぁほぼほぼ丸コピペだしいいよね)

Node.jsプログラム実行準備

さて、まずはNode.jsプログラムを走らせるところから。
ターミナルを開き、依存性のあるnpmモジュールをインストール…。

npm install twit
npm install long
npm install request

そして完成したソースコードがあるディレクトリへ行き、node ファイル名.jsを実行!
…どうかなどうかな…。

エラー発生

はい、エラー発生しました。
エラー容はこんな感じのが…。

$ node dlTwitterUserImages.js
1 : http://pbs.twimg.com/media/DtsZpfQU0AArtcC.jpg
2 : no image
...
1082 : http://pbs.twimg.com/media/CyUf01CUUAAgey6.jpg
{ Error: getaddrinfo ENOTFOUND pbs.twimg.com pbs.twimg.com:80
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'pbs.twimg.com',
  host: 'pbs.twimg.com',
  port: 80 }
...

一応画像ファイルはいくつか生成されたのですが、その大半が中身0バイトの空ファイルしかない状態に…どうしたものか…。

早速エラー内容でググり、参考になりそうな記事を探してみました。
https://hdykokd.github.io/posts/npm-getaddrinfo-enotfound/

どうやらDNSの名前解決に失敗しているっていうエラーらしく。
今回でいうとpbs.twimg.comへアクセスするための名前解決に失敗したって感じみたいです。

記事をみた感じ、下記のような手順で解決なさっていたので…。

  1. nslookupで目的となるサーバー(今回はpbs.twimg.com)のIPアドレス名を取得
  2. /etc/hostsIPアドレス名 pbs.twimg.comという行を追記

早速試してみました。
IPアドレスを調べ、アドレス内容を/etc/hostsに追記。

$ nslookup pbs.twimg.com
Server:     131.206.79.11
Address:    131.206.79.11#53

Non-authoritative answer:
pbs.twimg.com   canonical name = cs196.wac.edgecastcdn.net.
cs196.wac.edgecastcdn.net   canonical name = cs2-wac.apr-8315.edgecastdns.net.
cs2-wac.apr-8315.edgecastdns.net    canonical name = cs2-wac-us.8315.ecdns.net.
cs2-wac-us.8315.ecdns.net   canonical name = cs45.wac.edgecastcdn.net.
Name:   cs45.wac.edgecastcdn.net
Address: 72.21.91.70

そしてもう一度node実行!

{ Error: getaddrinfo ENOTFOUND pbs.twimg.com pbs.twimg.com:80
    at errnoException (dns.js:50:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26)
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'pbs.twimg.com',
  host: 'pbs.twimg.com',
  port: 80 }

うーんダメみたいっすね…。
PCを再起動してもダメみたい…どうしたものか…。

おまけにetc/hostsを変更した影響か、公式TwitterのWebページににアクセスしても、画像が表示されない様になってしまいました。
これはやばいと、etc/hostsに追加した行を削除する事に。
なんかもう踏んだり蹴ったりというか全部が裏目に出てるというか…。

ちゃんとTwitterAPIのこと勉強しよう

このあと色々記事漁ったり探してみても全部ダメで…。
流石に記事内容が間違ってるとは思えず…途方に暮れちゃいました。
やはりソースコードを理解しないまま、丸コピペしてしまうのは良くないですね…。

それに、前々からTwitterAPIには興味があったので…。
せっかくの機会です、ちゃんと公式ドキュメントから、きっちり1からTwitterAPIを勉強しよう!ということで。

次回記事へ…

次の記事では、公式ドキュメントを参考にTwitterAPIに関する理解を深めていこうかと思います。
やっぱ、プログラミングする時はちゃんと理解しないとダメですよね!

それではー!