Part35:Twitter投稿クライアントを作ろう

凛「みんなーっ!ただいまにゃーっ!」
海未「希、どうしたのですか?なにやら急に」
希「唐突にネタが降ってきたんで、ちょっとね」

希「なんか簡単なものでもElixirで作れたら見せ合っても面白いかなと思ってな」
海未「ああ、なるほど。これまでは文法解説でしたからね」
希「で、とりあえずTwitterの投稿専用クライアントを作ってみた」
凛「投稿、専用・・・?」
希「Twitterはコミュニティじゃない、ソーシャル独り言サービスだ、って誰かさんが言っとった」
凛「その人友達いないのかな?」
海未「禁忌に触れるなっ! ・・・はっ、私、今何を?」
凛「な、なんでも、ないにゃ・・・」

希「ま、ちゃちゃっと作ってみようか。簡単や」

$ mix new lilywhite_twitter

希「まずmix.exsに依存関係周りの定義」

defmodule LilywhiteTwitter.Mixfile do
  use Mix.Project

  def project do
    [app: :lilywhite_twitter,
     version: "0.0.1",
     elixir: "~> 1.1",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps,
     escript: [main_module: LilywhiteTwitter]]
  end

  # Configuration for the OTP application
  #
  # Type "mix help compile.app" for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type "mix help deps" for more examples and options
  defp deps do
    [
      {:oauth, github: "tim/erlang-oauth"},
      {:extwitter, "~> 0.5"}
    ]
  end
end

希「ExTwitterってライブラリがあるからそれをdepsに追加してやる。認証にOAuth使うから、Erlang-OAuthも追加や」
海未「OAuthの方はGitHubから取ってくるのですね」
希「Hexに登録されてないんや。このへんの融通が利くのがMixの便利なところやね」

希「config.exsにはアプリの設定やね」

config :extwitter, :oauth, [
  consumer_key: "**************************************",
  consumer_secret: "**************************************",
  access_token: "**************************************",
  access_token_secret: "**************************************"
]

希「認証情報は自前でTwitterから取ってきて使ってや」
凛「そっか、アプリ開発の登録をしないといけないんだね」
希「最近のTwitterは締め付けが厳しくてな、アプリの名前にまで文句言われる始末や」

希「lilywhite_twitter.exにメインロジックを実装する。といっても」

defmodule LilywhiteTwitter do

  def loop do
    st = IO.gets "status:"
    ExTwitter.update st
    loop
  end

  def main(args) do
    loop
  end

end

希「これだけや」
海未「本当に簡単ですね・・・」
希「ここまでの設定が済んでれば、あとはほとんどライブラリが面倒見てくれる。実質ExTwitter.updateが全てや」

希「実行すると」

$ mix deps.get
$ mix compile
$ rlwrap -c mix run -e "LilywhiteTwitter.main([])"
status:みんなのアイドル、園田海未です♡
status:あなたのハート撃ち抜くぞ☆
status:@littlebird ラブアロー☆シュート!

希「こんなふうになるわけや」
海未「なりません!特に最後はなんですか!?」
凛「えー、海未ちゃんTwitter始めたら絶対こうなると思うにゃ」
海未「なりません!」
希「もしくはガチの中二病キャラか、どっちかやね」
凛「闇に飲まれよ!とかっ、ばにっしゅめんとでぃすわーるど!とかっ」
希「Twitterは人間の本性を暴くツールや」
海未「うう、私は絶対に手を出しません・・・」

希「とりあえずこれで、コマンドラインで黙々とTwitterにPostしていくことができる」
凛「使いようによっては便利かもしれないにゃ」
希「screenでどっかのウインドウで動かしておくと、作業しながらキーボードから手を放さずぶつぶつ言えるで」
凛「ループにしないで投稿1回のコマンドみたいにしてもいいかもしれないにゃ」
海未「しかしやはり、タイムラインを読めないのは寂しいですね」
凛「ほほー、海未ちゃんやっぱりファンの歓声が聴きたいんだね!」
海未「ち、違います!・・・いえ、違わないのですが、違います!」
希「Streamでタイムライン流し続けるみたいなのもできるみたいやし、それもまた時間あったらやってみよか」


LINEで送る
Pocket