さらに続き
昨日のコードは冷静に見るといろいろひどいなw
今日は投稿機能を追加しました。テスト投稿しまくってすみません>マイミクのみなさん
投稿するとき文字コードはEUC-JPにします。
UTF-8だとはじかれる、のではなく白紙投稿になります。(はじいたほうがよくね?)
そろそろブログに貼るのがきつい長さになってきた。
#!/usr/bin/ruby # -*- coding: utf-8 -*- require 'rubygems' require 'tk' require 'mechanize' require 'kconv' class Mixi @agent #ログイン def initialize(email, password) @agent = WWW::Mechanize.new response = @agent.post("http://mixi.jp/login.pl", {'next_url' => '/home.pl', 'email' => email, 'password' => password}) end #最新の取得 def recent_echo nicknamelist = [] echolist = [] @agent.get("http://mixi.jp/recent_echo.pl") @agent.page.search('div/div/div/div/table/tr/td/div.echo_nickname').each{|nickname| nicknamelist.push nickname.inner_text } @agent.page.search('div/div/div/div/table/tr/td/div.echo_body').each{|echo| echolist.push echo.inner_text } [nicknamelist, echolist] end #投稿に(たぶん)必要なpost_keyなるものを取得 def post_key @agent.get("http://mixi.jp/recent_echo.pl") @agent.page.search('div/div/div/div/div/form/ul/li/input[3]/@value') end #必要なのかしらないけど、デフォルトのメッセージ「今何してる?」的なやつ def default_value @agent.get("http://mixi.jp/recent_echo.pl") @agent.page.search('div/div/div/div/div/form/ul/li/input[4]/@value') end #投稿機能 #日本語はEUC-JPで書き込みます。UTF-8とかだと白紙投稿になってしまいます。 #ちなみにmixiのソースはEUC-JP def post_echo(entry) @agent.get("http://mixi.jp/recent_echo.pl") response = @agent.post("http://mixi.jp/add_echo.pl", {'body' => entry.toeuc, 'post_key' => self.post_key, 'default_value' => self.default_value, 'redirect' => 'recent_echo' }) response end end #こっからはGUI mixi = Mixi.new('xxxxxxxxxx@xxxxxxxxxxx', 'xxxxxxxxxxxxx') nicknamelist, echolist = mixi.recent_echo #フレーム作る。(必要なかったかも。。。) flame_top = TkFrame.new flame_bottom = TkFrame.new flame_top.pack(:side => :top) flame_bottom.pack(:side => :top, :fill => :x) #最新を表示するテキストエリア text = TkText.new(flame_top, :height => 35).pack (0..24).each{|i| text.insert 'end', nicknamelist[i].to_s + ": " + echolist[i].to_s + "\n"} #投稿の入力欄 entry = TkEntry.new(flame_bottom).pack(:fill => :x) #リロードボタン TkButton.new(flame_bottom){ text "reload" command { text.delete '1.0', 'end' nicknamelist, echolist = mixi.recent_echo (0..24).each{|i| text.insert 'end', nicknamelist[i].to_s + ": " + echolist[i].to_s + "\n"} } pack(:side => :right) } #投稿ボタン TkButton.new(flame_bottom){ text "post" command { if !(entry.value == "") mixi.post_echo entry.value end entry.value = "" text.delete '1.0', 'end' nicknamelist, echolist = mixi.recent_echo (0..24).each{|i| text.insert 'end', nicknamelist[i].to_s + ": " + echolist[i].to_s + "\n"} } pack(:side => :right) } Tk.mainloop