娘の出産あたりから8年強撮りためている写真、動画がかなりの量になってきました。USBHDD上でミラーリングして2重化しているものの、そろそろ失うと痛すぎる感じです。

さらに、最近はSSDを利用しだしていることもあり、写真は容量を食い過ぎるので極力SSD上においておきたくないという事情もあります。それでUSBHDDに逃がしても、今度は写真を見たり保存したりするためにUSBHDDを刺すのが面倒…という…。(←ダメ人間)

クラウド上にも保存して冗長化するのが良いだろうとは前からずっと思っていたのですが、無料で使える容量の制限の問題や(課金まではしたくない)、クラウドへ保存することの心理的壁もありいままでやって来ませんでしたが、先日のデジカメ購入の件もあり、再度検討しなおしました。

結果、Flickrの無料で使える容量が1TBとなっていることを知りました。1TB使えるなら全ての写真、動画ファイルを格納してもまだまだ余裕があります。USBHDDにも保管しておきつつさらにFlickrにもバックアップが良さそうです。さらに親族と共有する場所を直接FlickrにしてしまえばSSDの容量削減にもなるし…といいことづくめです。

で、過去の大量の写真ふくめて簡単にFlickrへアップロードが行えるプログラムが欲しくなります。この目的のものは色々と存在しているようですが、私の環境ではまともに動きませんでした…。

というわけで、せっかくなので自分でプログラムを組んでみます。

flickrのAPIを生で叩くのは大変そうなので(軟弱)、まず簡単に扱えるライブラリを探します。…となるとやっぱりrubyが良いですかね。すぐに以下のモジュールが見つかりました。

これを使ってみます。

まず、インストール。

gem install flickraw

と、思ったらいきなりエラー

ERROR:  Could not find a valid gem 'flickraw' (>= 0), here is why: Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (

https://s3.amazonaws.com/production.s3.rubygems.org/latest_specs.4.8.gz)

これ、前にも見た記憶がある・・・。最近rubyで何かやろうと思うとSSLのチェックに引っかかってばかりいる気がします。

こちらと全く同じ状況でした。同じように対処する。

gem source --add http://rubygems.org
gem update --system
gem source --remove http://rubygems.org

改めてgemのインストール。

gem install flickraw

インストールに成功しました。
ではサンプルを…。

APIKeyが必要なので、まずそれを入手。

商用目的ではないので、「APPLY FOR A NON-COMMERCIAL KEY」を選択。

キーをゲット!

まずはサンプルの「Simple」をそのまま試してみます。

C:/Ruby200-x64/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect returned =1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

またしても、SSSLエラー。

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

を書き加える。
うまくいかない。gemの中で使ってるからかな。

  • http://igarashikuniaki.net/diary/20130617.html

以前も同じ事で引っかかって同じ記事を見ながら対応したなーと思いながら対処。これでうまく動きました。

続いてAuthenticationのサンプルを実行。認証にも成功しました。

超単純なロジックでのUploadもうまく行きました。
それでは…ということでフォルダを指定してその下にある画像、動画ファイルを再帰的に取得してアップロードするように簡単に書いてみます。

一応これで動作しましたが、ネットワーク接続周りの問題ですぐにエラーになってしまって処理が終わってしまいます。また、やり直すと同じファイルをアップロードして重複してしまいます。この辺りの対処が必要です。続きはまた明日かな。

土日でちょっと子どもたちとプログラムをまた書きました。すごくシュールな作品が…。

仕事でそろそろ作業時間記録をきちんとつけないといけなくなったので(めんどうでござる)、記録用のアプリケーションを作ってみました。巷に色々と同じような目的のソフトは有るのですがちょっと使いやすいと思えるものがなかったので。類似の出来のいいオープンソースのソフトがあったら教えて下さい。実装を見比べてみたいので・・・。

人が作ったライブラリを調べながらC#でとりあえず動くものを作るのはかなり出来るようになってきた感じです。今のレベルより上達するのは趣味のプログラマをやってるだけでは厳しいかも…。

さて、どうかな??

さて、どうかな??

Sinatraでリンク集を作成するwebアプリを作ってます。そんなもの今さらわざわざ作らなくても……という感じではありますがやっぱり自分でプログラムを書くのはとても面白いですね。gut, githubの練習も兼ねてるのでコードはここで見られます。

1件のコメント

以前はFriendFeedを使って複数RSSのTwitterへの通知を行っていたのですが、ある時からFriendFeedが手動で更新してあげないとRSSを更新してくれなくなってしまったので、一度HootSuiteに移行しました。でもそうしたら今度はHootSuiteが多数のフィードを通知するには有料版に移行しなくてはいけなくなってしまったので、それっきりになってました。

無いならつくろう、ということで、思い立って、自宅のサーバー上のRubyスクリプトをCronで回してRSSの取得からTwitterへの投稿を行うスクリプトを書きました。

うまく動作している・・・かな?

コードも貼りつけておきます。ツッコミあれば是非…。
<<<
# -*- coding: utf-8 -*-

#rssの更新を確認して、twittする

require “cgi”
require “open-uri”
require “rss”
require “twbot2″
require “date”
require “yaml”
require “pp”
require “json”
require “uri”

class RSS_Twitt < TwBot

 def load_data
   result_array = Array.new()
   filename = "feeds.yml"
   feeds = YAML.load_file(filename)

   feeds.each do |feed|
     puts feed['url']
     rss = open(feed['url']) { |file| RSS::Parser.parse(file.read)}
     lastupdate = feed['lastupdate']

     rss.items.each do |item|
       date = Date.parse(item.date.to_s)
       if lastupdate == nil || lastupdate < date
         short_url = shorten(item.link)
         result_array << "#{feed['comment']} / #{item.title} <#{short_url}>"
         if feed['lastupdate'] == nil || feed['lastupdate'] < date
           feed['lastupdate'] = date
         end

       end
     end

   end

   #ymlへの書き出し
   open(filename, 'w'){|f| f.puts feeds.to_yaml}

   #Arrayを逆順にする
   puts result_array.reverse
   result_array.reverse
 end

 def shorten(long_url)
   id = 'ebibibi'
   api_key = 'R_aa86b1df9d6f611376c6c75bbab9cd63'
   version = '2.0.1'

   long_url = URI.encode(long_url)
   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

end

SELFDIR = File.dirname(__FILE__)
ARGV.each do |mode|

 RSS_Twitt.new mode, "#{SELFDIR}/config.yml", "#{SELFDIR}/error.log"

end
>>>

feeds.ymlに読み込むRSSを指定するようにしてあります。
<<< ruby
---
- lastupdate: 2011-01-17

 comment: !binary |
   5pel6KiY44KS5pu444GN44G+44GX44GfIQ==

 url: http://ebi.dyndns.biz/diary/no_comments.rdf

- lastupdate: 2011-01-12

 comment: !binary |
   44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==

 url: http://ebi.dyndns.biz/windowsadmin/feed/

- lastupdate: 2011-01-18

 comment: !binary |
   44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==

 url: http://ebi.dyndns.biz/learning_english/feed/

- lastupdate: 2011-01-13

 comment: !binary |
   44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==

 url: http://ebi.dyndns.biz/ipod_touch_iphone/feed/

- lastupdate: 2011-01-13

 comment: !binary |
   44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==

 url: http://d.hatena.ne.jp/ebibibi/rss2

- lastupdate: 2011-01-18

 comment: !binary |
   44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==

 url: http://ebi.dyndns.biz/dokuwiki/feed.php

- lastupdate: 2010-12-21

 comment: !binary |
   c21hcnQuZm3jgafml6XoqJjjgpLmm7jjgY3jgb7jgZfjgZ8h

 url: http://smart.fm/assets/users/ebibibi/journal.rss

>>>

…というのは常識なのかもしれないけど、気がつくまでにかなり時間がかかった。getもsetも定義しておかないと列が表示されませんでした。

検索で見つけられなかったので書いておく。

いまさらですが、C#でXMLをちょっといじっております。いや、このあたりの技術は便利ですね。

で、XMLNodeとXMLElementの関係がよくわからず苦戦中。。。。

社内ブログにMovableTypeを使おうとしているのだけれども、Webを検索しても大量のブログ作成〜ユーザー登録のフローを説明しているところが見当たらない。需要がないのか、全てお金が発生する世界の話なのか。

もうちょっと良く探してみると、英語のサイトにユーザー登録スクリプトの断片が見つかる。perl。見つけたサンプルコードはこんな感じ。

use lib 'lib';
use lib 'extlib';

とりあえず実行してみるも、Blogは作成されるものの、ユーザーは作成されておらず、さらにテンプレートはすっからかんの状態。んーこれならHTTPをしゃべった方が早いような気がする・・・ということで、この方法は断念。根性なしです。