望遠鏡ドットコム
遠くを望みます
公開日: 2012/11/22 : プログラミング
引き続き、ひとりぶろぐさんのデジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方を参考にして、RICOH GR Digital IIから勝手にアップロードできるように改変しました。
RICOHの文字がAUTPRINT.MRKにあれば、[JOB]の前にCR+LFを足すというだけのものですが、無事に動いて満足満足。ありがとうございます。
#!/mnt/sd/DCIM/122_TREK/usr/bin/ruby # -*- coding: utf-8 -*- require 'net/ftp' require 'net/http' require 'uri' # ------------------------------ # user configuration # ------------------------------ AUTPRINT_MRK = "/mnt/sd/MISC/AUTPRINT.MRK" FTP_SERVER = "あなたのftpサーバ" FTP_USER = "あなたのftpアカウント" FTP_PASSWORD = "あなたのftpパスワード" FTP_PATH = "ftpサーバのアップロード先のパス" # http://stewgate.appspot.com/sg1/ STEW_GATE_TOKEN = "あなたのStewGateのtoken" MENTION_TO = "@your_twitter_account" # ------------------------------ # constants # ------------------------------ STEW_GATE_API = "http://stewgate.appspot.com/sg1/post/" LINE_BREAK = "\r\n" DELIMITER = "#{LINE_BREAK}#{LINE_BREAK}" # ------------------------------ # methods # ------------------------------ def generate_signature() a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a return " " + ( Array.new(4) do a[rand(a.size)] end ).join end def post_escape( string ) string.gsub(/([^ a-zA-Z0-9_.-]+)/) do '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase end.tr(' ', '+') end def post(msg) params = { "_t" => STEW_GATE_TOKEN, "msg" => "#{MENTION_TO} " + msg + generate_signature, } begin uri = URI::parse( STEW_GATE_API ) http = Net::HTTP.new( uri.host, uri.port ) request = Net::HTTP::Post.new( uri.request_uri ) request.content_type = "application/x-www-form-urlencoded" query = params.map do |key, val| "#{key}=#{post_escape(val.to_s)}" end res = http.request( request, query.join( '&' ) ) puts "Response: #{res.code}" rescue post("Error while Stewing: #{$!}") end end # ------------------------------ # main # ------------------------------ # AUTPRINT.MRKは存在するか? if !File.exists?(AUTPRINT_MRK) # 無ければ終了 exit else begin # MRKファイルの読み込み MRK_FILE = File.read(AUTPRINT_MRK) # RICOH用にCRLFを追加 if MRK_FILE.match("RICOH") MRK_FILE.gsub!("\[JOB\]", "#{LINE_BREAK}\[JOB\]") end # あれば読み込みして改行二つでセクションごとにsplit sections = MRK_FILE.split(DELIMITER) # ftpサーバとの通信を開始 ftp = Net::FTP.open(FTP_SERVER, FTP_USER, FTP_PASSWORD) # putするディレクトリにcd ftp.chdir(FTP_PATH) sections_shadow = sections.dup # セクションを走査 sections.each do |section| # セクションの中身を改行でsplit lines = section.split("{LINE_BREAK}") # 最初の行が[JOB]だったら if lines[0].match(/\[JOB\]/) # 1行ごとに走査 lines.each do |l| # 画像パスの行だったら if md = l.match(/^<IMG SRC = "(.+)">/) # ファイルパスをSDのマウントポイントからのフルパスにして取り出す fname = md[1].sub("..", "/mnt/sd") # フルパスの場所に画像が存在したら if File.exists?(fname) # ftpサーバに画像をアップロード begin ftp.putbinaryfile(fname, File.basename(fname)) post("#{File.basename(fname)} uploaded.") rescue post("Error while ftp put: #{$!}") end end # 正常に終了したらこのJOBを削除 sections_shadow.delete(section) # 終了したJOBを削除した状態でまだJOBが残っていたら # JOBを一つ削除した形でAUTPRINT.MRKを書き込み if (sections_shadow.length > 1) File.write(AUTPRINT_MRK, sections_shadow.join(DELIMITER)) else # 削除してJOBが残っていなかったらAUTPRINT.MRKを削除 File.unlink(AUTPRINT_MRK) post("All uploads done.") exit end end end end end rescue post("Error while processing: #{$!}") end end
メールアドレスが公開されることはありません。 * が付いている欄は必須項目です
コメント
名前 *
メールアドレス *
ウェブサイト
ブラウザベースの業務の効率化のためにブックマークレットを作成したのです
sacd_extractは、SACD-ISOをDSFやDIFFに展開す
サーバの証明書を更新 今年もやり方を忘れていたので再録。
MAXI-COSI Pebbleは国内・海外の価格差がそれほどないので
やっぱり遅いeBayのGlobal Shipping Program
→もっと見る