# HG changeset patch # User KAMURA Sota # Date 1328516758 -32400 # Node ID b79b888eceac018d281bb2b7aa0a4482503ababc init diff -r 000000000000 -r b79b888eceac .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,8 @@ +syntax: glob +*.aux +*.log +*.toc +*.o +*~ +\#* +tmp/ diff -r 000000000000 -r b79b888eceac RCS/xsotter.rb,v --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RCS/xsotter.rb,v Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,330 @@ +head 1.5; +access; +symbols; +locks + c109047:1.5; strict; +comment @# @; + + +1.5 +date 2011.07.11.07.58.42; author c109047; state Exp; +branches; +next 1.4; + +1.4 +date 2011.07.11.03.10.17; author c109047; state Exp; +branches; +next 1.3; + +1.3 +date 2011.07.08.14.32.40; author c109047; state Exp; +branches; +next 1.2; + +1.2 +date 2011.07.08.05.02.19; author c109047; state Exp; +branches; +next 1.1; + +1.1 +date 2011.07.08.04.33.41; author c109047; state Exp; +branches; +next ; + + +desc +@@ + + +1.5 +log +@Xsotterクラス実装 +@ +text +@#! /usr/bin/env ruby + + + + +require"rubygems" + +#gem `twitter`, `1.1.1` + +require"oauth" +require"twitter" +require"nkf" +include Twitter + +$KCODE = "-e" +class Xsotter + + def initialize (com) + @@path = File.expand_path("~") + "/.xsotter_token" + @@login = false + + oauth if File.exist?(@@path) == false + + IO.foreach(@@path) do |line| + a=line.chomp.split(" ") + @@ACCESS_TOKEN = a[0] + @@ACCESS_SECRET = a[1] + @@login = true + end + + Twitter.configure do |config| + config.consumer_key = 'SuucnlrR6yAOXz3AQaJG4Q' + config.consumer_secret = 'wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw' + config.oauth_token = @@ACCESS_TOKEN + config.oauth_token_secret = @@ACCESS_SECRET + end + comand(com) + end + + def comand(com) + case com[0] + when "--logout" + File.delete(path) + when "-f" + f=Twitter.favorites.each do |fav| + str = NKF.nkf("-e", fav.user.screen_name + ":" + fav.text) + puts str + puts + end + when "-R" + if com[1]==nil + puts "使用法: xsotter -R ID" + else + Twitter.retweet(id=com[1]) + end + when "-F" + if com[1]==nil + puts "使用法: xsotter -F ID" + else + Twitter.favorite_create(id=com[1]) + end + when "-T" + str = "" + com.delete_at(0) + com.each do |i| + str += i + " " + end + str = NKF.nkf("-w", str) + Twitter.update(str) + when "-t" + Twitter.home_timeline.each do |line| + str = line.text + str = NKF.nkf("-e", line.user.screen_name + ": " + str ) + puts str + puts "ID=#{line.id}" + puts + end + when "-r" + Twitter.mentions.each do |line| + str = line.text + str = NKF.nkf("-e", line.user.screen_name + ": " + str ) + puts str + puts + end + + else + puts" -t :タイムラインを出力します。\n -T str :strをツイッターに投稿します。\n -r :自分宛てのリプライを出力します。\n -f 自分のお気に入りのツイートを出力します。\n -F ID :IDをお気に入りに追加します。\n -R ID ID:をリツイートします\n--logout :もう一度認証するまで使えなくなります。" + end + + + end + + def oauth + consumer = OAuth::Consumer.new("SuucnlrR6yAOXz3AQaJG4Q", "wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw", :site => "http://twitter.com") + request_token = consumer.get_request_token + puts + puts request_token.authorize_url #ここでURLがでて認証画面に + puts + puts "にアクセスし、Twitterにログインしてxsotterを認証し、PINを入手してください。" + puts + begin + puts"PINを入力してください。" + print"PIN=" + oauth_verifier = STDIN.gets.chomp + + token = request_token.get_access_token(:oauth_verifier => oauth_verifier ) + + open(@@path,"w") do |txt| + token = token.token + " " + token.secret + txt.printf"%s",NKF.nkf("-e",token) + end + File.chmod(0400,@@path) + puts "xsotterでログインできるようになりました。もういちど実行してください。" + exit(0) + rescue + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて " + exit(1) + end + end + +end + +begin + xsotter = Xsotter.new(ARGV) +rescue =>err + puts err + case err + when /POST/ + puts"同じ内容のツイートを連続で投稿することはできません。140文字を超えたツイートもできません。" + end + +end +@ + + +1.4 +log +@-R リツイートする +-f お気に入りにいれる + +を追加 +@ +text +@d4 1 +a4 1 +path = File.expand_path("~") + "/.xsotter_token" +d15 2 +a16 6 +begin + IO.foreach(path) do |line| + a=line.chomp.split(" ") + ACCESS_TOKEN = a[0] + ACCESS_SECRET = a[1] + end +d18 11 +a28 15 + Twitter.configure do |config| + config.consumer_key = 'SuucnlrR6yAOXz3AQaJG4Q' + config.consumer_secret = 'wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw' + config.oauth_token = ACCESS_TOKEN + config.oauth_token_secret = ACCESS_SECRET + end + + case ARGV[0] + when "--logout" + File.delete(path) +when "-f" + f=Twitter.favorites.each do |fav| + str = NKF.nkf("-e", fav.user.screen_name + ":" + fav.text) + puts str + puts +d30 22 +a51 2 + when "-R" + if ARGV[1]==nil +d53 9 +a61 9 + else + Twitter.retweet(id=ARGV[1]) + end + when "-F" + if ARGV[1]==nil + puts "使用法: xsotter -F ID" + else + Twitter.favorite_create(id=ARGV[1]) + end +d63 22 +a84 9 + str = "" + ARGV.delete_at(0) + ARGV.each do |i| + str += i + " " + end + str = NKF.nkf("-w", str) + Twitter.update(str) + when "-t" + Twitter.home_timeline.each do |line| +d86 2 +a87 5 + str = line.text + str = NKF.nkf("-e", line.user.screen_name + ": " + str ) + puts str + puts "ID=#{line.id}" + puts +d89 2 +a90 9 + when "-r" + Twitter.mentions.each do |line| + str = line.text + str = NKF.nkf("-e", line.user.screen_name + ": " + str ) + puts str + puts + end + else + puts" -t :タイムラインを出力します。\n -T str :strをツイッターに投稿します。\n -r :自分宛てのリプライを出力します。\n -f 自分のお気に入りのツイートを出力します。\n -F ID :IDをお気に入りに追加します。\n -R ID ID:をリツイートします\n--logout :もう一度認証するまで使えなくなります。" +d92 2 +a93 7 + +rescue => err + puts err + case err + when /POST/ + puts"同じ内容のツイートを連続で投稿することはできません。140文字を超えたツイートもできません。" + else +a94 1 + +d108 1 +a108 1 + open(path,"w") do |txt| +d112 1 +a112 1 + File.chmod(0400,path) +d114 1 +a114 1 + +d116 14 +a129 2 + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて? " + end +d131 1 +a132 1 + +@ + + +1.3 +log +@自分宛てのリプライ取得を -r に変更 +@ +text +@d32 13 +a44 1 + when "-f" +d46 1 +a46 1 + puts "使用法: xsotter -f ID" +d75 1 +a75 1 + puts" -t :タイムラインを出力します。\n -T str :strをツイッターに投稿します。\n -a :自分当てのリプライを出力します。\n -f ID :IDをお気に入りに追加します。\n --logout :もう一度認証するまで使えなくなります。" +@ + + +1.2 +log +@ツイートをお気に入りに追加できるように(-f オプション追加) +@ +text +@d55 1 +a55 1 + when "-a" +@ + + +1.1 +log +@Initial revision +@ +text +@d32 7 +a38 1 + when "-T" +d48 1 +d52 1 +d63 1 +a63 1 + puts" -t タイムラインを出力します。\n -T str strをツイッターに投稿します。\n -a 自分当てのリプライを出力します。\n --logout もう一度認証するまで使えなくなります。" +@ diff -r 000000000000 -r b79b888eceac RCS/xsotter_class.rb,v --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RCS/xsotter_class.rb,v Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,179 @@ +head 1.1; +access; +symbols; +locks; strict; +comment @# @; + + +1.1 +date 2011.11.28.03.10.57; author c109047; state Exp; +branches; +next ; + + +desc +@@ + + +1.1 +log +@Initial revision +@ +text +@#! /usr/bin/env ruby +# -*- coding: euc-jp -*- +require"rubygems" +#gem `twitter`, `1.1.1` +require"oauth" +require"twitter" +require"nkf" +include Twitter + +class Xsotter + + def initialize (token_path) + @@path = File.expand_path("~") + token_path + # @@path = File.expand_path("~") + "/.xsotter_token" + @@login = false + @@kcode = "-e" + oauth if File.exist?(@@path) == false + + IO.foreach(@@path) do |line| + a=line.chomp.split(" ") + @@ACCESS_TOKEN = a[0] + @@ACCESS_SECRET = a[1] + @@kcode = a[2] + @@login = true + end + + Twitter.configure do |config| + config.consumer_key = 'SuucnlrR6yAOXz3AQaJG4Q' + config.consumer_secret = 'wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw' + config.oauth_token = @@ACCESS_TOKEN + config.oauth_token_secret = @@ACCESS_SECRET + end + # comand(com) + end + + def public_tl + return Twitter.public_timeline() + end + + def comand(com)#com=array + case com[0] + when "--logout" + File.delete(path) + when "-k" + File.chmod(0700,@@path) + open(@@path,"w") do |txt| + token = @@ACCESS_TOKEN + " " + @@ACCESS_SECRET + " " + com[1] + txt.printf"%s",NKF.nkf(@@kcode,token) + end + File.chmod(0400,@@path) + + when "-f" + f=Twitter.favorites.each do |fav| + str = NKF.nkf(@@kcode, fav.user.screen_name + ":" + fav.text) + puts str + puts + end + when "-R" + if com[1]==nil + puts "使用法: xsotter -R ID" + else + Twitter.retweet(id=com[1]) + end + when "-F" + if com[1]==nil + puts "使用法: xsotter -F ID" + else + Twitter.favorite_create(id=com[1]) + end + when "-T" + str = "" + com.delete_at(0) + com.each do |i| + str += i + " " + end + str = NKF.nkf("-w", str) + Twitter.update(str) + when "-t" + Twitter.home_timeline.each do |line| + str = line.text + str = NKF.nkf(@@kcode, line.user.screen_name + ": " + str ) + puts str + puts "ID=#{line.id}" + puts + end + when "-r" + Twitter.mentions.each do |line| + str = line.text + str = NKF.nkf(@@kcode, line.user.screen_name + ": " + str ) + puts str + puts + end + + else + puts NKF.nkf(@@kcode, " -k KCODE :-e euc -j shift_jis\n -t :タイムラインを出力します。\n -T str :strをツイッターに投稿します。\n -r :自分宛てのリプライを出力します。\n -f 自分のお気に入りのツイートを出力します。\n -F ID :IDをお気に入りに追加します。\n -R ID ID:をリツイートします\n--logout :もう一度認証するまで使えなくなります。") + end + + + end + + def oauth + consumer = OAuth::Consumer.new("SuucnlrR6yAOXz3AQaJG4Q", "wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw", :site => "http://twitter.com") + request_token = consumer.get_request_token + puts + puts request_token.authorize_url #ここでURLがでて認証画面に + puts + puts "にアクセスし、Twitterにログインしてxsotterを認証し、PINを入手してください。" + puts + begin + puts"PINを入力してください。" + print"PIN=" + oauth_verifier = STDIN.gets.chomp + + token = request_token.get_access_token(:oauth_verifier => oauth_verifier ) + + open(@@path,"w") do |txt| + token = token.token + " " + token.secret + " -e" + txt.printf"%s",NKF.nkf(@@kcode,token) + end + File.chmod(0400,@@path) + puts "xsotterでログインできるようになりました。もういちど実行してください。" + exit(0) + rescue + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて " + exit(1) + end + end + +end + +if $0 == __FILE__ + consumer = OAuth::Consumer.new("SuucnlrR6yAOXz3AQaJG4Q", "wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw", :site => "http://twitter.com") + request_token = consumer.get_request_token + puts + puts request_token.authorize_url #ここでURLがでて認証画面に + puts + puts "にアクセスし、Twitterにログインしてxsotterを認証し、PINを入手してください。" + puts + begin + puts"PINを入力してください。" + print"PIN=" + oauth_verifier = STDIN.gets.chomp + + token = request_token.get_access_token(:oauth_verifier => oauth_verifier ) + + open("./token","w") do |txt| + token = token.token + " " + token.secret + " -e" + txt.printf"%s",NKF.nkf("-w",token) + end + puts "xsotterでログインできるようになりました。もういちど実行してください。" + exit(0) + rescue + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて " + exit(1) + end +end +@ diff -r 000000000000 -r b79b888eceac c109047_token --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c109047_token Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,1 @@ +404639148-oiHQTrgZkgY7SMvp08A5ocOfUu8ORPTqLa7kV5UI lF3vRDuLypujzRQhIGkwBLm3L5ufNLQonvAWOS9T6Cw -e \ No newline at end of file diff -r 000000000000 -r b79b888eceac c109047bot.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c109047bot.rb Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,28 @@ +#! /usr/bin/env ruby +# -*- coding: euc-jp -*- + +require'/home/irhome/c109/c109047/xsotter/xsotter_class' +def follow () + followers = Twitter.follower_ids("c109047").ids + following = Twitter.friend_ids("c109047").ids + newbie = followers - following + newbie.each do |i| + Twitter.friendship_create(i) + end +end + +begin + xsotter = Xsotter.new("/xsotter/c109047_token") + + #ptl = xsotter.public_tl + while true + if /^0/=~Time.now.min.to_s + follow + xsotter.comand(["-T","#{Time.now.hour}時だよ"]) + + end + sleep 59 + end +rescue + retry +end diff -r 000000000000 -r b79b888eceac c109047jikandayobot.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c109047jikandayobot.rb Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,39 @@ +#! /usr/bin/env ruby +# -*- coding: euc-jp -*- + +require'/home/irhome/c109/c109047/xsotter/xsotter_class' + +begin + xsotter = Xsotter.new("/xsotter/c109047_token") + id="" + data=[] + while true + puts"start" + if /^0/=~Time.now.min.to_s + hour = Time.now.hour + data.each {|i| + if i[0] == hour + xsotter.comand(["-T"],"#{i[1]} #{hour}時に何かあるんじゃないの?") + end + } + end + + Twitter.mentions({:count => 1}).eacho do |r| + puts "1" + if !(id == r.id) + id = r.id + usr = r.user.screen_name + puts text = r.text + if /\S*(\d+)時\S*/ =~ text + if $1.to_i <= 24 && $1.to_i >= 0 + data << [$1.to_i,usr] + end + end + sleep 3 + end + end + end +rescue + retry +end + diff -r 000000000000 -r b79b888eceac xsotter.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xsotter.rb Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,16 @@ +#! /usr/bin/env ruby +# -*- coding: euc-jp -*- + +require'/home/irhome/c109/c109047/xsotter/xsotter_class' + +begin + xsotter = Xsotter.new("/.xsotter_token") + xsotter.comand(ARGV) +rescue =>err + puts err + case err + when /POST/ + puts"同じ内容のツイートを連続で投稿することはできません。140文字を超えたツイートもできません。" + end + +end diff -r 000000000000 -r b79b888eceac xsotter_class.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xsotter_class.rb Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,156 @@ +#! /usr/bin/env ruby +# -*- coding: euc-jp -*- +require"rubygems" +#gem `twitter`, `1.1.1` +require"oauth" +require"twitter" +require"nkf" +include Twitter + +class Xsotter + + def initialize (token_path) + @path = File.expand_path("~") + token_path + # @path = File.expand_path("~") + "/.xsotter_token" + @login = false + @kcode = "-e" + oauth if File.exist?(@path) == false + + IO.foreach(@path) do |line| + a=line.chomp.split(" ") + @ACCESS_TOKEN = a[0] + @ACCESS_SECRET = a[1] + @kcode = a[2] + @login = true + end + + Twitter.configure do |config| + config.consumer_key = 'SuucnlrR6yAOXz3AQaJG4Q' + config.consumer_secret = 'wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw' + config.oauth_token = @ACCESS_TOKEN + config.oauth_token_secret = @ACCESS_SECRET + end + # comand(com) + end + + def public_tl + return Twitter.public_timeline() + end + + def comand(com)#com=array + case com[0] + when "--logout" + File.delete(path) + when "-k" + File.chmod(0700,@path) + open(@path,"w") do |txt| + token = @ACCESS_TOKEN + " " + @ACCESS_SECRET + " " + com[1] + txt.printf"%s",NKF.nkf(@kcode,token) + end + File.chmod(0400,@path) + + when "-f" + f=Twitter.favorites.each do |fav| + str = NKF.nkf(@kcode, fav.user.screen_name + ":" + fav.text) + puts str + puts + end + when "-R" + if com[1]==nil + puts "使用法: xsotter -R ID" + else + Twitter.retweet(id=com[1]) + end + when "-F" + if com[1]==nil + puts "使用法: xsotter -F ID" + else + Twitter.favorite_create(id=com[1]) + end + when "-T" + str = "" + com.delete_at(0) + com.each do |i| + str += i + " " + end + str = NKF.nkf("-w", str) + Twitter.update(str) + when "-t" + Twitter.home_timeline.each do |line| + str = line.text + str = NKF.nkf(@kcode, line.user.screen_name + ": " + str ) + puts str + puts "ID=#{line.id}" + puts + end + when "-r" + Twitter.mentions.each do |line| + str = line.text + str = NKF.nkf(@kcode, line.user.screen_name + ": " + str ) + puts str + puts + end + + else + puts NKF.nkf(@kcode, " -k KCODE :-e euc -j shift_jis\n -t :タイムラインを出力します。\n -T str :strをツイッターに投稿します。\n -r :自分宛てのリプライを出力します。\n -f 自分のお気に入りのツイートを出力します。\n -F ID :IDをお気に入りに追加します。\n -R ID ID:をリツイートします\n--logout :もう一度認証するまで使えなくなります。") + end + + + end + + def oauth + consumer = OAuth::Consumer.new("SuucnlrR6yAOXz3AQaJG4Q", "wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw", :site => "http://twitter.com") + request_token = consumer.get_request_token + puts + puts request_token.authorize_url #ここでURLがでて認証画面に + puts + puts "にアクセスし、Twitterにログインしてxsotterを認証し、PINを入手してください。" + puts + begin + puts"PINを入力してください。" + print"PIN=" + oauth_verifier = STDIN.gets.chomp + + token = request_token.get_access_token(:oauth_verifier => oauth_verifier ) + + open(@path,"w") do |txt| + token = token.token + " " + token.secret + " -e" + txt.printf"%s",NKF.nkf(@kcode,token) + end + File.chmod(0400,@path) + puts "xsotterでログインできるようになりました。もういちど実行してください。" + exit(0) + rescue + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて " + exit(1) + end + end + +end + +if $0 == __FILE__ + consumer = OAuth::Consumer.new("SuucnlrR6yAOXz3AQaJG4Q", "wCL1YIuGH8fIKvBfXKrBbacGF8mhJHBR3A11MpmyPw", :site => "http://twitter.com") + request_token = consumer.get_request_token + puts + puts request_token.authorize_url #ここでURLがでて認証画面に + puts + puts "にアクセスし、Twitterにログインしてxsotterを認証し、PINを入手してください。" + puts + begin + puts"PINを入力してください。" + print"PIN=" + oauth_verifier = STDIN.gets.chomp + + token = request_token.get_access_token(:oauth_verifier => oauth_verifier ) + + open("./token","w") do |txt| + token = token.token + " " + token.secret + " -e" + txt.printf"%s",NKF.nkf("-w",token) + end + puts "xsotterでログインできるようになりました。もういちど実行してください。" + exit(0) + rescue + puts"PINを間違えて入力しているかも、もう一度チャレンジしてみて " + exit(1) + end +end diff -r 000000000000 -r b79b888eceac xsotter_mail.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xsotter_mail.rb Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,22 @@ +#! /usr/bin/env ruby +# -*- coding: euc-jp -*- + +require '/home/irhome/c109/c109047/xsotter/xsotter_class' + +sender = ENV['SENDER'] +rcpt = ENV['RECIPIENT'] +body = ""#Array.new +if sender == nil || rcpt === nil + exit 0 +elsif/.*@.*/ !~ sender + exit 0 +end +while line = gets + f=1 if /^$/=~line + if f ==1 + body += line + end +end +STDERR.puts NKF.nkf('-e', body) +body=["-T", body] +Xsotter.new(body) diff -r 000000000000 -r b79b888eceac xsotter_token.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xsotter_token.txt Mon Feb 06 17:25:58 2012 +0900 @@ -0,0 +1,1 @@ +182750651-zaM1eoNj3gEeVoAXCL54V6MCz6bBXaicDAmOAp7L OLOy2ipAEHVyQnrrhSxCvvHFLl6sQhGLjlfla7E80 \ No newline at end of file