モノクロームの部屋

「趣味は?」と聞かれても言いよどんでしまうので新しく趣味を探すことにしました。

刺身工場でタンポポを乗せていたところTwitter botが出来上がった


これはなに

GW日記3日目1
刺身工場の職業訓練生がTwitterAPIを叩くなどしてbotを作りたくなったのでその進捗など。

情報系のトピックしかないなので興味がない人はおたより返信のところから見てみよう。

あとソースコードとか一切ないんで本筋の話を読んでもコードが書けるようになったりはしません。カスのブログ。











経緯

みなさんは、好きなラーメン屋さんがたくさんありますね?


光の速度で更新されてゆくタイムラインの中でラーメン屋さんの営業情報を知りたくてリストを作ったりしていますね?


そして、ラーメン屋さんが客のツイートを無駄にRTしていて結局リストに無駄な情報が流れてきたりしますね?






はい、開発のモチベーションとしてはこんな感じです。

  • リストにあるラーメン屋さんの公式Twitterから、営業情報"だけ"を表示したい
  • ラーメン屋さんによる「○○食べました😋今日も美味しかった❗️」みたいな客のツイートのRTは見たくない
  • だがリストにはRTを非表示にする機能はついていない
  • じゃあラーメン屋さんをフォローしてRTを非表示にすれば解決するかというと、他のツイートに埋もれて結局営業情報が流れる

ということで純粋な営業情報だけを取得するbotが欲しくなりました。

step-1: わたしのステータス

Twitter botを作る記事はごまんとあるのですが、大概前提知識がデカすぎて「いやそれは知らんが……」となります(なっていました)。

ここで開発開始のわたしのステータスを公開します。

  • Twitter APIとやらが存在して、それをよしなに"叩く"とよしなな"戻り値"をドロップするらしいことは知っている
  • じゃあどうやってAPIを叩く?それは知らん
  • そもそもどんなAPIがある?ドキュメントを読んでいない
  • プログラミング自体はまあ別にやってやれんことはない
  • もう全体的に何が必要で何が足りていないのかわからない
    • APIを叩くライブラリがどうやら存在するらしく、それは必要な気がした
  • Pythonはほぼ書けない
    • なんかTweepyというライブラリが便利そうなのだが……
  • AtCoder灰色(叩かないで……)
    • AtCodererあるある: C++の環境はできてる

よわい(確信)。

この記事は0からAPIの叩き方を学んでドキュメントを読んで実装する開発ドキュメンタリー記事2となっております。

ちなみに絶対にどこかでボロが出てハックされるのでソースコードは載せません(あとコードの載せ方もよくわかんない)。




step0: 作りたいものの仕様設計

結構大仰な言い回しですがさすがに決めておくかと思い、仕様を決めました。

以下の感じのものができたら嬉しいですね。

  • リストに入っているアカウントのRTを除いたツイートを取得してどこかに垂れ流す

課題を細分化していきます。

  1. リストに入っているアカウントを取得する
  2. それぞれのアカウントのツイートを取得する
  3. そこからRTを消す
  4. その結果をどこかに放出する

がやりたいことですね。


要するにTLにあるラーメン屋さん直々のツイートだけをどこかにストアしておきたいわけです。

サーバーを借りたりは面倒だったので、今回は自分にDMするという方法にしました。




step1: APIはどうやったら叩けるのか

ここから未知の領域に突入していきます。

APIとは"Application Programming Interface"の略だそうです。そうなんだ。
インターフェースを謳っているあたりプログラムとプログラムの橋渡しをしてくれそうですね。

まずは"Twitter API 叩き方"なんかで検索してみましょうか。

結果こんな感じの理解が生まれました。

  • API利用には申請がいる
  • 申請をするとAPIキーやAPIトークンなどをもらえる
  • 申請には「何に使うのか」などを英語で詳細に記述する必要がある
  • 申請するためのアカウントはメールアドレス登録が必須

キーとかトークンはなんとなく知っています、確かタンポポ花言葉でしたよね。

あと全部英語でしたが義務教育を修了していたおかげで特に詰まることはありませんでした。

して、Twitter APPsにログインしたところDeveloper Accountにしろと言われたので必要事項を記入してメール認証を経て登録しました。

して、たぶん必要であろうものを取得しました。以下の4つです。

  • API Key(Consumer Keyとも)
  • API Secret(Consumer Secretとも)
  • Access Token
  • Access Token Secret

こいつらを厳重に保管しろと言われたのでそうしました。

あと、英語で色々書けとか言われなかったけどなんだったんだろう(これが伏線になっています)。

それはそれとして、これがあればTweepyで簡単に、具体的には20行ぐらいでbotの作成ができるらしいのですが……




Pythonのコードが読めない!






動的型付け言語が一気に嫌いになりました。
やっぱりOCamlやね3




step2: 沼

pythonを入れてtweepyを入れてVSCodeにtweepyのパスを通してエトセトラしてたら沼にハマりました。




沼1: API v2

とりあえずテストでなんかツイートしてみようとして、道端でソースコードを拾ってやってみたのですが403Forbiddenが出る始末。

ありえんやろそんなんと思い、色々調べてみた4ところ、このAppはEssential accessしかなく、さまざまな例で挙がっているAPI v1.1が叩けないことがわかってしまいました。

API v1.1を叩くにはElevated accessが必要5なのですが、この申請に英語で詳細な利用目的を書く必要があったらしいです。

デフォルトのままEssentialしかないやつを作成したため初手でぶつかんなかったわけだ6

ネットの知識のほとんどが無に帰したわけですね。

API v1.1を利用するにはElevated access7が必要なのでとにかくAPI v2縛りでやってみる必要が発生しました。




沼2: Read only App

これは普通に文字通りで、設定ミスっててツイートのポストができなかっただけのお話です。

デフォルトだとRead-Onlyになるので気をつけよう。




step3: Hello, TwitterAPI!

できました。

ここまでできたのでリストからツイートを取得してみましょう。




沼3: OAuth1.0a認証

当然サクサク行くわけもなく沼りました。

具体的にはリストのツイート取得ができませんでした。

なんでかというと、リストが非公開で、そもそもリスト作ってる開発用アカウントも非公開なのでpublicに見られるものならなんでも取得するOAuth2.0認証とは相性が悪かったのです。

して、Appのユーザの権限を利用するOAuth1.0a認証が必要になりました。8

これに関してはtweepyのドキュメントを眺めていたらOAuth1.0a認証でリストを取得するためのパラメータがあるのに気づいて解決しました、デフォルトが2.0なのはダメだろ。




step4: 完成

実装しながらこの記事書いてたらなんかElevated accessの申請が通っていたのですぐにAPI v1.1を叩くコードに軌道修正したところ無事30分で出来上がりました。

卑怯とは言うまいな。

ちなみに各tweetjson形式で保存できるのでその辺もうまいこと活用してみました。

今回の報告は以上です。結局GWはこれやってたら終わったのですが、そこそこ面白かったのでもうちょっと暇になったらまた色々作りたいと思います。




Re: おたよりフォーム

一応今回もやりますよ!

まずはこちら!

PN: Tom-H@苦
「苦しいよ〜」

またよりそいホットラインと化してる。

幸せになりたければ苦しめ!幸せになれるとは限らんが!

本筋とは逸れますが最近ふと思い出してちょっと良いなと思ったセリフをご紹介……

「命令は3つ、死ぬな、死にそうになったら逃げろ、そんで隠れろ、運が良ければ隙を突いてぶっ殺せ」

ゲームのセリフなんですが、人生もこれらしいです。
その場合何をぶっ殺すのかは知りませんが……




次!

PN: No.3215
苦痛論について。人生Zero-Sumというのは無数の反例が作成可能で成り立たないが、苦しみ論者が言わんとするところは『大きな夢を実現するには多数の困難を乗り越えることが必要だ』なる命題であろう。 アイドルコンテンツを具体例として考えてみる。
各アイドルは等しく大きな夢を持ち、それに向けて日々を鍛錬に過ごしている。アイドルの才能には多寡があるため練習量[苦しみ]は人によって異なるが、多くのアイドルコンテンツでは才能のあるキャラはそれはそれで何か人間関係等のトラブル[苦しみ]を介することが常態化しており、結果としてどのアイドルも苦しみを以てして夢を実現している。この事実が苦しみ論者の発言の根底にあることは、苦しみ論者の傾向を踏まえると疑う余地はない。
しかし、各視聴者視点での各キャラの苦しみの多さは様々である。これはコンテンツが切り取るシーンの分量や、受難の種類に視聴者がどれだけ共感できるかが関係しており、これらのパラメータから導き出された苦しみの総和こそが絶叫のデシベルと相関する。つまりキャラの伸びる伸びないという判断は、視聴者視点で多くの苦しみを経験したか否かが関与している、これが自身の主張となる。
この自説の上で、苦しみ論者は自身も多くの苦しみを纏うことで大きな躍進を望んでいるのではないかと考えた。要するに、苦痛論者のいう苦しみとはいかなる辛苦をも表すものではなく、アイドルコンテンツ内で描かれる人間としての成長や他人に絶叫を与えることに繋がる、意義のある試練に限るのだ。単に苦しいという状態ではなく、夢に続く茨の道を踏み進める"覚悟"こそが『ナイス苦しみ』なのだろう。
ちなみに自分は大きな夢がないため苦しみ論者とは袂を分けている。お前も刹那的快楽主義者にならないか?(740letters/1hour)

このおたより読み切るのが苦しかったよ。

はい、読みました。

なんか論破されそうな勢いのある文章だったので読み進めてみたら別にそこそこ共感してくれてただけだった、ありがとね。

アイドルコンテンツの話、一体何ドルコネクトの話をしているんだ……早く完全版をリリースしてくれ……

創作における苦しみの総和が絶叫のデシベルと相関するって表現好きです。

得てしてある程度苦しんでくれればそれなりに絶叫するし、ある一定ラインで絶叫のデシベルはあんまり伸びなくなる(デシベルは音圧かなんかの常用対数を取っている)からそこまで苦しんでほしくないし、それを超えて苦しんでもデシベルは単調増加するのでいいですね。対数化した恩恵がモリモリと現れています。

こちらの文脈の話は概ね同意です。創作において、苦しみの多相性はデカいカタルシスを生みます。

あと"覚悟"とか"苦しみ"とか"袂を分かつ"とか一部地域でのトレンドワードが満載でワロています。

さて、刹那的快楽主義ですが……

詰まるところ刹那的快楽主義とは両立可能で、その刹那が終わったのちの苦しみにこそ目を向けるべきだと思いました。

実際長続きする幸福なんてそんなに数なくて、なんなら今のところ思い当たるものもありません。

苦痛論で語ったのは今ある苦しみにどう向き合うかという話で、私の立場では幸せになりたくないというわけではないです。

個人的には刹那的快楽主義は大いに賛成なので、金銭などに余裕があればモリモリと快楽をしていこうと思いました。

具体的にはそろそろ外気浴シーズンなのでサウナとかモリモリと行きたいです。




本日のラスト。

PN: 石川啄木
ヌバラシイもの
ラーメン二郎京都店
・乳のでかい女

石川啄木ラーメン二郎京都店行ってたんだ。

後者はかの有名な一握の砂で詠んだ『大という 字を百あまり 砂に書き 死ぬことをやめて帰り来れり』という歌にも著されています。

海で自殺を図っていた啄木が渚のパイパイデカデカギャルのデカ乳に見惚れて人生に活気を見出した際の歌です。

大という字を百あまり砂に書くという行為でその出来事を反芻している、という描写はデカパイの印象深さをありありと表現していますが、一方で行為そのものは自殺志願者の陰鬱とした思考回路を深遠に表現しています。

その結果『死ぬことをやめて帰り来れり』となるあたり、乳のでかい女は全てを解決してくれるということでしょう。

ヌバラシイ……9




おたよりフォーム

おたよりフォームを置いておきます。

今後はGWほど充実した日々を送れなさそうなので更新が不定期になると思いますがおたよりはいつでも募集しています。


  1. 日記とは毎日記すから日記なのでは?ボブは訝しんだ。

  2. 日記は?

  3. 講義でやらされているんですが、意味わかんないエラー吐くし引数ひとつひとつにいちいち括弧つけないと正しくパースされないしでこちらもヘイトが高いです。でも、静的検証は、素晴らしい……

  4. この間1日。

  5. エラーメッセージにも載ってたのにEssential accessとしばらく見間違えていて「?」と言っていた。

  6. 見ていた記事がことごとく昔のものでAPI申請まわりのやつが古かった。

  7. なんとこの記事を書いていたら、通った。

  8. ざっくり言うと、2.0のほうは非鍵垢の公開リストしか見れなくて、1.0のほうは認証済みユーザが見れる範囲のものはなんでも見れるって感じです。OAuthにしろAPIにしろ1より2のほうが不便ってどういうことだよ。

  9. 私は別にどっちでもいいです。