Login
Immutable PageDiscussionInfoAttachments
Diff for "alstamber/Egofav"

MMA
Differences between revisions 1 and 2
Revision 1 as of 2012-12-10 00:30:40
Size: 3828
Editor: alstamber
Comment:
Revision 2 as of 2012-12-10 01:00:01
Size: 4488
Editor: alstamber
Comment:
Deletions are marked like this. Additions are marked like this.
Line 67: Line 67:
   * https接続を確立するには次のように書くみたい
{{{#!highlight ruby
uri = URI.parse("https://userstream.twitter.com/2/user.json")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE

https.start do |https|
    #do something
end
}}}
 * 接続したいURLをURI.parseを使ってパースしてURIクラスのインスタンスにする
 * それを使ってHTTPクラスのインスタンスを生成する
 * HTTPS接続のためのもろもろの設定をする(SSL接続するとか証明書はどうとか)
 * startメソッドを呼び出すと通信が開始される

なにこれ

  • もとから自分の名前の入ったツイートを自動的にふぁぼるスクリプトがあれば便利だなあ(?)と思っていた
  • いつもどおりPythonで書こうと思ったけど日本語周りが糞過ぎてヤル気が失せる
  • ならついでにRubyのお勉強を兼ねてRubyでスクリプト書いてみようかな

Rubyとか全然わからない件

  • こうやればHello, Worldできるのは知ってる

   1 puts "Hello, World"
  • ブロックなにそれ美味しいの?

とりあえずOAuthしないとね

  • OAuthの処理を一から書くなどというドMなことしたくないし、余計なバグを生むだけだし、そもそも車輪の再生産もいいところなのでライブラリを探す
  • exampleに挙がっているソースコードを解読

   1 @consumer=OAuth::Consumer.new( "key","secret", {
   2     :site=>"https://agree2"
   3 })
  • 先頭の@はなんだ
    • perlで言えば配列だけど……
    • インスタンス変数らしい
  • ::とは
    • 基本的には.と同じで、あるクラスorモジュールの中に入っているものを参照する
      • 今回の場合OAuthモジュールの中のConsumerクラスを参照している
    • 大文字で始まるメソッドを引数なしで呼び出す場合は::だとエラーになるらしい
      • Rubyでは大文字で始まるトークンを定数としてみなすため
  • クラスとモジュールは何が違う
    • クラスはインスタンスオブジェクトを生成するためのひな形として働く
      • クラスがもつnewというメソッドを呼び出すとそのクラスに対応するインスタンスオブジェクトが生成される
    • モジュールからはインスタンスオブジェクトを生成することはできない
      • クラスは継承ができるが、モジュールは継承ができない
      • モジュールにメソッドを定義しておいて、それを別のクラスに挿木のように読み込んでくることができる
    • 今回使うライブラリのOAuthモジュールは、単に複数のクラスを一つにまとめる目的で用意されているようだ
  • {:site〜}の部分の意味とは
    • rubyでは次のように書くとハッシュを作ることができる

   1 {:symbol => value,
   2  :symbol => value,
   3  ...
   4 }
  • :symbolとは
    • :hogeとかくとhogeがsymbolというものになるそうで
    • ハッシュのキーは普通の文字列でもいいのだけど、symbolを使うほうがrubyでは主流らしい
  • つまりハッシュを引数に与えているってことですね
  • これとは別に次のようなメソッドもあるらしい

   1 OAuth::AccessToken.new(consumer, ACCESS_TOKEN, ACCESS_SECRET)
  • consumerのところには先程のConsumerクラスのインスタンスを突っ込めば良い
  • ACCESS_TOKENとACCESS_SECRETにはそれぞれdev.twitter.comで手に入れられるトークンを突っ込めば良い
  • こうして得られたAccessTokenのインスタンスを使ってTwitterの認証を行う

ふぁぼスクリプトの挙動を考える

  • Userstreamに接続して自分のタイムラインに流れてくるツイートを読み込んでくる
  • ツイートに「こはく」が含まれていればそれをふぁぼる

Userstreamへの接続

   1 uri = URI.parse("https://userstream.twitter.com/2/user.json")
   2 https = Net::HTTP.new(uri.host, uri.port)
   3 https.use_ssl = true
   4 https.verify_mode = OpenSSL::SSL::VERIFY_NONE
   5 
   6 https.start do |https|
   7     #do something
   8 end
  • 接続したいURLをURI.parseを使ってパースしてURIクラスのインスタンスにする
  • それを使ってHTTPクラスのインスタンスを生成する
  • HTTPS接続のためのもろもろの設定をする(SSL接続するとか証明書はどうとか)
  • startメソッドを呼び出すと通信が開始される

alstamber/Egofav (last edited 2012-12-10 02:31:08 by alstamber)