OAuthでTwitterAPIのSearch、Trend、Postを利用するスクリプト


ちょいと昔話

2次元の話ではなくてリアルな話で、学生時代にプログラミングセンスの塊のような人を見ていたので、自身の成長速度がいまいちな事も納得しているし、多くを求めてはいないのだけれど、やはりなかなか上手くスクリプトが書けないでいると正直しんどかったりする(´ω`)‥トホー

こないだの村上さんのところで、文章はとにかく練習です。という話があり、プログラミングも言語だし通じるところはあるよなぁと思ったり。村上春樹さんの作品は本当の戦争の話をしようしか読んだ事がなく、その作品も訳者としてのものなので原作はまだ読んだ事がなかった。積み本がまだ幾らか残っているので次回の周期にでも手を出そうかな。ε-(/・ω・)/

中田英さんと対談してたよなぁってそれは村上龍さんだったんだね。つい最近まで勘違いしていたのはちょっと内緒の話だ。Σ(・ω・;|||

今回はOAuth

最近はMechanizeばかりだったので、WebAPIを使うのは久しぶり。Mechanizeも認証は可能だけれどTwitterAPIを利用するので認証をOAuthで済ませてメソッドで分けようという魂胆です。

initializeはインスタンスを作ったときに必ず実行される部分になります。ここで認証します。initializeの意味的には初期化ということでした。

昔さくらのクラウドのAPIを題材にしたときに、自分のキーをウェブに吊るすという大チョンボをやらかして若干トラウマなので、ソースコードは最後にまとめて載せますw
即再発行したのでキャッシュがどこかに残っていても大丈夫です。

作成したメソッドは3種類

・ワード検索のgetword

・トレンド検索のtrend

・ポストのwordpost

機能はそのままで、いろいろ作りこむためのひな形ようにしているつもりです。
mainのメソッドで選択する形をとっているのですが、一人でやっているとこの辺をどうしたらいいのかなかなかうまくまとまらないですね。

参考サイト

RubyでTwitterAPIを叩いてみたら彼女が… | Septeni Engineers' Blog | セプテーニ エンジニアブログ:

Trendはほぼそのままになっています…Σ(・ω・;|||

ソース

ソースです。※なぜかインデントが…(ω・`))(´・ω・`)(( ´・ω)

require 'rubygems'
require 'json'
require 'oauth'
require 'kconv'
require 'uri'

METH = ARGV[0]

class Twit

  #認証
  def initialize
    consumer_key        = "hoge"
    consumer_secret     = "hoge"
    access_token        = "hoge"
    access_token_secret = "hoge"
    con = OAuth::Consumer.new(
      consumer_key,
      consumer_secret,
      site:'https://api.twitter.com/'
    )
    @ep = OAuth::AccessToken.new(
      con,
      access_token,
      access_token_secret
    )
  end

  #日本語変換
  def encode_ja(url)
    ret = ""
    url.split(//).each do |c|
      if  /[-_.!~*'()a-zA-Z0-9;\/\?:@&=+$,%#]/ =~ c
       ret.concat(c)
      else
       ret.concat(CGI.escape(c))
      end
    end
    return ret
  end

  #ワード検索
  def getword
    print "keyword?-: "
    keyword=STDIN.gets.chomp
    res = @ep.request(:get,
    "https://api.twitter.com/1.1/search/tweets.json?q=#{encode_ja(keyword)}&lang=ja&locale=ja&result_type=mixed&count=10"
                          )
    result = JSON.parse(res.body)
  end

  #トレンドサーチ
  def trend
    res = @ep.request(:get,
                      'https://api.twitter.com/1.1/trends/available.json')
    result = JSON.parse(res.body)
    result.each do |avail|
      if avail["name"] == "Japan" then
        @japan_woeid = avail["woeid"]
        break
      end
    end
    res = @ep.request(:get,
                     'https://api.twitter.com/1.1/trends/place.json?id=' + @japan_woeid.to_s)
    japan_trends = JSON.parse(res.body)
  end

  #つぶやき
  def postword
    print "Message?-: "
    messages=STDIN.gets.chomp
    res = @ep.post("https://api.twitter.com/1.1/statuses/update.json", status: "#{messages}")
    result = JSON.parse(res.body)
  end
end

def main
  twitcatch = Twit.new

  case METH
  when "getword"
    mess = twitcatch.getword
    mess["statuses"].each do |message|
      puts "-------------------------------------------"
      puts message["user"]["name"]
      puts message["text"]
    end
  when  "trend"
     japantrend = twitcatch.trend
     japantrend[0]['trends'].each do |trend|
       puts trend['name']
     end
  when  "postword"
      twitcatch.postword
  else
    puts "USAGE twittcatch.rb <getword or trend or postword>"
      exit
  end
end

main

いま実行するとこんな結果に。

getword

$ ruby twittcatch.rb getword
keyword?-: C言語
赤松健
私がC言語をやっていたのはZ80時代だったので、8086時代になってセグメントが出来てから、ポインタが今どうなっているのか、想像できなくて恐い。
超絶腹ペコTEA君
C言語勉強中・・・

なかなか上手く行きませんな。
クライアント作者の毒舌な妹bot
お兄ちゃん、C言語は読み書きできても、日本語の読み書きは下手だよね。国語力どうにかしたら?
akira0422™
RT @chomado: 最初に触れた言語、
情報系出身→C言語から
独学→JSから
が多いイメージ。

私は何からだったかなあ…?
ちかよらんとこ
C言語信者こわ 近寄らんとこ
いまずー
猫でも分かるC言語と楽しく覚えるC言語で脳細胞を著しく傷めた
最新ネットビジネス副業的アフィリエイト
出来そうって思ったら早い者勝ちですよ? C言語 glut カーナビゲーション5,000 円 ~ 50,000 円 http://t.co/zlF3nLZaqM
影虎
ただ慣れてるBASIC基準で良かった。C言語ならどうしようかと…
クライアント作者の毒舌な妹bot
お兄ちゃん、C言語とJavaしかできないくせにiPhone使ってるんだね。
東大就活2016【公式】
【SPI非言語/問題例】

AはP地点からQ地点に向かい時速4km、BはQ地点からP地点に向かい時速8kmの速さで同時に出発する。P地点とQ地点との距離が2.4kmだとAとBが出会うのは2人が出発して何分後か。

(A)10分後
(B)12分後
(C)14分後

解答:(B)

 

trend

$ ruby twittcatch.rb trend
#結婚のあとに予測変換でプロポーズしてみる
#初めて聴いたボカロ曲
#自分の名前の最初と最後を取ったらきっとカワイイ
iTunes Store
MI作戦
#身長と年齢晒してイメージ違ったらrt
ミギー
トライオン
ASAS発売
時の間
 

POST は省略して実験でPOSTしたのを。

まとめ

GUIが苦手なので、ひとまずCUIで基本を作ってからGUIに移行させつつ。という戦略をとろうかと思っています。

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *