Archive

Posts Tagged ‘ruby’

bot source

4月 15th, 2010
RUBY:
  1. #!/usr/bin/env ruby
  2. require 'rubygems'
  3. require 'rss'
  4. require 'logger'
  5. require 'twitter'
  6.  
  7. log = Logger.new('feed.log')
  8. log.level = Logger::DEBUG
  9.  
  10.  
  11. def shorten(long_url)
  12.   id = 'YOUR_BITLY_ID'
  13.   api_key = 'BITLY_API_KEY'
  14.   version = '2.0.1'
  15.  
  16.   query = "version=#{version}&longUrl=#{long_url}&login=#{id}&apiKey=#{api_key}"
  17.   result = JSON.parse(Net::HTTP.get("api.bit.ly", "/shorten?#{query}"))
  18.   result['results'].each_pair {|long_url, value|
  19.     return value['shortUrl']
  20.   }
  21. end
  22.  
  23. feeds = []
  24. feeds <<{
  25.   'author' => 'yusukezzz',
  26.   'url' => 'http://yusukezzz.net/blog/feed'}
  27.  
  28. $KCODE = 'u'
  29. latest = 0
  30. httpauth = Twitter::HTTPAuth.new('twitter_account', 'password')
  31. client = Twitter::Base.new(httpauth)
  32. begin
  33.   File.open('latest.dat'){ |f| latest = f.gets }
  34. rescue => e
  35.   log.debug(e.message)
  36. end
  37. feeds.each do |feed|
  38.   rss = RSS::Parser.parse(feed['url'])
  39.   rss.channel.items.reverse.each do |i|
  40.     if latest.to_i <i.pubDate.to_i
  41.       post = "#{feed['author']}> #{i.title} #{shorten(i.link)}"
  42.       begin
  43.         client.update(post)
  44.       rescue => e
  45.         log.debug(e.message)
  46.       end
  47.       File.open('latest.dat', 'w') do |f|
  48.         f.puts i.pubDate.to_i.to_s
  49.         log.debug('update latest date')
  50.       end
  51.     end
  52.   end
  53. end

,

rubyで隠しファイルへのシンボリックリンクを作る

2月 15th, 2010

実行したディレクトリ内の"."で始まるファイル・ディレクトリのシンボリックリンクを
ホームディレクトリ以下に作ります

RUBY:
  1. Dir.glob('*', File::FNM_DOTMATCH){|f|
  2.   if f =~ /^\.\w+/
  3.     s = File.symlink(File.expand_path(f), File.expand_path("~/#{f}"))
  4.     puts "#{f} OK" if s == 0
  5.   end
  6. }

File.globの第2引数にFile::FNM_DOTMATCHで隠しファイルがマッチするようになります
これでdropboxに置いてるLinux用設定ファイルを一括でインストール出来るようになりました

,

rubyでmemcacheを使う

2月 8th, 2010

ubuntu9.10

BASH:
  1. sudo aptitude install memcached
  2. sudo gem install memcache-client system_timer

gemのmemcacheは入れない(入れてたらuninstall)

使い方

RUBY:
  1. require 'rubygems'
  2. require 'memcache'
  3.  
  4. CACHE = MemCache.new 'localhost:11211', :namespace => 'hoge'
  5. CACHE['cached'] = 'value'
  6. p CACHE['cached']

,

rubyでgmailの送受信をする

1月 18th, 2010

gmailはssl必須なので面倒かと思ったのですが、意外と簡単でした

まずは以下のライブラリを入れましょう
#以下はruby1.8系の場合. ruby1.9系はsmtpがssl対応してるのでtlsmailは要りません

TEXT:
  1. sudo gem install tmail tlsmail

tmailはメールをparse、tlsmailはsmtpのssl化をしてくれます

RUBY:
  1. require 'rubygems'
  2. require 'tmail'
  3. require 'tlsmail'
  4. require 'net/smtp'
  5. require 'net/pop'
  6. require 'kconv'
  7.  
  8. mail = TMail::Mail.new
  9. mail.to = 'recieve@some.domain'
  10. mail.from = 'your@gmail.com'
  11. mail.subject = '件名'.tojis
  12. mail.date = Time.now
  13. mail.mime_version = '1.0'
  14. mail.set_content_type 'text', 'plain', {'charset => 'iso-2022-jp''}
  15. mail.body = 'うんたらかんたら'.tojis
  16. Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
  17. # port = 587はtlsの場合. ruby1.9系でenable_sslしている場合はport = 465になると思われます
  18. Net::SMTP.start('smtp.gmail.com', 587, 'localhost.localdomain',
  19.                  'your@gmail.com', 'your_gmail_password') do |smtp|
  20.   smtp.sendmail(mail.encoded, mail.from, mail.to)
  21.   puts 'send mail.'
  22. end
  23.  
  24. Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
  25. Net::POP3.start('pop.gmail.com', 995, 'your@gmail.com',
  26.                 'your_gmail_password') do |pop|
  27.   unless pop.mails.empty?
  28.     pop.mails.each do |m|
  29.       mail = TMail::Mail.parse(m.pop)
  30.       # toutf8はterminalなんかで表示する場合. windowsならtosjis
  31.       puts "#{mail.from}:[#{mail.subject}] #{mail.body.toutf8}"
  32.     end
  33.   end
  34. end

マルチバイト文字が入るところには忘れずにtojisしないと文字化けします

rubyでFlickrに自動アップロード

12月 5th, 2009

今までキャプチャにはgyamblr(矩形選択してtumblrにアップ)というソフトを使っていたのですが、
Vista64bitでは動きませんでした(単にtumblr側の仕様変更かもしれませんが)
最新版は2008年のものなのでこのソフトはあきらめ、別の方法を採りました

今回は矩形選択可能なキャプチャソフトとrubyスクリプトでキャプチャするだけで自動的にファイルをアップロードするようにしました
事前にflickrのAPI認証を行ってトークンキーを書き出しておきます(flickr.dat)
詳細はrflickrに同梱のサンプルを見てください
今回使用したスクリプトはこちら
説明は必要ないかと思いますが、このスクリプトのあるフォルダを監視して拡張子がjpe?gかpngのファイルがあったらアップロードし、完了したら削除します

RUBY:
  1. #flickr_uploader.rb
  2. require 'rubygems'
  3. require 'flickr'
  4.  
  5. flickr = Flickr.new('flickr.dat',
  6.                     API_KEY,
  7.                     SECRET
  8.                    )
  9.  
  10. while(1)
  11.   Dir.glob('*.{jpg,jpeg,png}').each do |f|
  12.     begin
  13.       flickr.photos.upload.upload_file(f, f)
  14.       puts "#{Time.now} upload success #{f}"
  15.       File.delete('./' + f)
  16.     rescue
  17.       puts "#{Time.now} error raised"
  18.     end
  19.   end
  20.   sleep 10
  21. end

[Tips] WindowsやLinuxで標準ブラウザを開く方法 - tetralabo
ここの方法でアップロードしたらブラウザを開くようにしてもいいかもしれません

で、Linuxだと問題なくこいつを&つけてバックグラウンドで動かせばいいのですが(Linuxはキャプチャソフトのほうが問題?)、
windowsだとrubyスクリプトをバックグラウンド(ウィンドウのない状態)で動かす方法がなく(?)、
仕方なくexerb(rubyスクリプトをexeで書き出す)を使うことにしました

今回一番難しかったのはexerbでexeを書き出すことです
flickrの依存でmimeというgemも一緒に入るのですが、これのmime/types.rb.dataというファイルが拡張子がrbじゃないせいかexerbで読み込まれず、
仕方なくmime側を直接書き換えてtypes.rbの中にtypes.rb.dataを追記しました;
これで、
ActiveScriptRubyでruby環境を構築している場合、コマンドプロンプトから
mkexy flickr_uploader.rb
Ctrl+C(スクリプトを終了させる)
exerb -c gui flickr_uploader.exy <- rbじゃないので注意
でflickr_uploader.exeというファイルが出力されます
こいつはウィンドウも何も持たず、キー操作を受け付けないのでタスクマネージャから終了する必要があります
ちなみに矩形選択可能なキャプチャソフトはWinShotを使っています

,