Archive

Posts Tagged ‘ruby’

bot source

April 15th, 2010 No comments
#!/usr/bin/env ruby
require 'rubygems'
require 'rss'
require 'logger'
require 'twitter'

log = Logger.new('feed.log')
log.level = Logger::DEBUG

def shorten(long_url)
  id = 'YOUR_BITLY_ID'
  api_key = 'BITLY_API_KEY'
  version = '2.0.1'

  query = "version=#{version}&longUrl=#{long_url}&login=#{id}&apiKey=#{api_key}"
  result = JSON.parse(Net::HTTP.get("api.bit.ly", "/shorten?#{query}"))
  result['results'].each_pair {|long_url, value|
    return value['shortUrl']
  }
end

feeds = []
feeds << {
  'author' => 'yusukezzz',
  'url' => 'http://yusukezzz.net/blog/feed'}

$KCODE = 'u'
latest = 0
httpauth = Twitter::HTTPAuth.new('twitter_account', 'password')
client = Twitter::Base.new(httpauth)
begin
  File.open('latest.dat'){ |f| latest = f.gets }
rescue => e
  log.debug(e.message)
end
feeds.each do |feed|
  rss = RSS::Parser.parse(feed['url'])
  rss.channel.items.reverse.each do |i|
    if latest.to_i < i.pubDate.to_i
      post = "#{feed['author']} > #{i.title} #{shorten(i.link)}"
      begin
        client.update(post)
      rescue => e
        log.debug(e.message)
      end
      File.open('latest.dat', 'w') do |f|
        f.puts i.pubDate.to_i.to_s
        log.debug('update latest date')
      end
    end
  end
end
Tags: ,

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

February 15th, 2010 No comments

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

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

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

Tags: ,

rubyでmemcacheを使う

February 8th, 2010 No comments

ubuntu9.10

sudo aptitude install memcached
sudo gem install memcache-client system_timer

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

使い方

require 'rubygems'
require 'memcache'

CACHE = MemCache.new 'localhost:11211', :namespace => 'hoge'
CACHE['cached'] = 'value'
p CACHE['cached']
Tags: ,

rubyでgmailの送受信をする

January 18th, 2010 No comments

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

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

sudo gem install tmail tlsmail

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

require 'rubygems'
require 'tmail'
require 'tlsmail'
require 'net/smtp'
require 'net/pop'
require 'kconv'

mail = TMail::Mail.new
mail.to = 'recieve@some.domain'
mail.from = 'your@gmail.com'
mail.subject = '件名'.tojis
mail.date = Time.now
mail.mime_version = '1.0'
mail.set_content_type 'text', 'plain', {'charset => 'iso-2022-jp''}
mail.body = 'うんたらかんたら'.tojis
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
# port = 587はtlsの場合. ruby1.9系でenable_sslしている場合はport = 465になると思われます
Net::SMTP.start('smtp.gmail.com', 587, 'localhost.localdomain',
                 'your@gmail.com', 'your_gmail_password') do |smtp|
  smtp.sendmail(mail.encoded, mail.from, mail.to)
  puts 'send mail.'
end

Net::POP3.enable_ssl(OpenSSL::SSL::VERIFY_NONE)
Net::POP3.start('pop.gmail.com', 995, 'your@gmail.com',
                'your_gmail_password') do |pop|
  unless pop.mails.empty?
    pop.mails.each do |m|
      mail = TMail::Mail.parse(m.pop)
      # toutf8はterminalなんかで表示する場合. windowsならtosjis
      puts "#{mail.from}:[#{mail.subject}] #{mail.body.toutf8}"
    end
  end
end

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

Tags:

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

December 5th, 2009 No comments

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

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

#flickr_uploader.rb
require 'rubygems'
require 'flickr'

flickr = Flickr.new('flickr.dat',
                    API_KEY,
                    SECRET
                   )

while(1)
  Dir.glob('*.{jpg,jpeg,png}').each do |f|
    begin
      flickr.photos.upload.upload_file(f, f)
      puts "#{Time.now} upload success #{f}"
      File.delete('./' + f)
    rescue
      puts "#{Time.now} error raised"
    end
  end
  sleep 10
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を使っています

Tags: ,