とろろこんぶろぐ

かけだしR&Dフロントエンジニアの小言

firebase使って単語帳作ってtwitterのbotに流すやつ作った【ハマったところ】

ハマったところを書き残しておく。超小さなミス含む。

Firebaseの認証の有効化

Firebaseでメールアドレス+パスワードの認証が可能。
Email, passwordを入れて呼び出すだけなので超簡単。

// 登録
fb.auth().createUserWithEmailAndPassword(email, password);

// サインイン
fb.auth().signInWithEmailAndPassword(email, password);

という感じで、コードは簡単だったのに、サインアップも認証もできなくて一瞬ハマったんだけど、ただコンソール画面からAuthenticationのログイン方法でメール/パスワードを有効化していなかっただけだった。。。

見るに、ツイッターGithub等でも認証できそうだったので次に使う。

Firebase Hosting

この辺りを参考にして、特に問題なくできた。
ただ、publicフォルダにhtml+jsファイルを入れ直す必要があったことくらいかな。

https://firebase.google.com/docs/hosting/?hl=ja
FirebaseでWebサイトを無料でサクッと公開してみる - Qiita

Twitterクライアントライブラリ

使ったライブラリは、npm trendsなど見てtwitにした。
https://github.com/ttezel/twit:twit

Twitter reply

発言させるまではすんなりいったので、発言させたセンテンスのツイートに返事をしたら訳を返すようにしようと思ったんだけど、このreplyでどハマりした。

というのも、てっきりreplyを指定して取ることができると思い込んでいたのだけれど、そんなパスはなく結局以下でストリームを取得した。

this.textStream = this.T.stream("statuses/filter", {track: ["@screen_name"]});

今度コールバックでTwitter Idからreplyされたツイートを取得しようとするんだけど、取得できない。

Tweetのidに、idとid_strが別に用意されていて、何も気にせずidを指定していたら、idとid_strが別の値だった。これに気づかずまたハマった。id_strにしたら動いた。

10個くらい同じツイートができない仕様もめんどいけど、センテンス増やせば大丈夫なので放置。

あと、streamの止め方がよくわからなかった。
stream.start()とstop()が用意されてるんだけど、stream.onですでに取得し始めるし、stopを呼んでも止まらなかった。
まあ止める必要がないしまあいっかと思ったので、これ以上調べてない。

Herokuのデプロイ

さてbot作ったしHerokuで動かそうと思ったが、動かない。
logを見てみると、

heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

これで若干ハマったけど、以下を参考にしてworkerで動かすようにしたら解決した。

Heroku で ポート指定しないタイプの Node.js アプリをデプロイする時につまづいたこと - Qiita


以上。
あと他に思い出したら追記しよう。