<< 前のページ | 次のページ >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ローカルファイルシステムのファイルをHTTPで取得できるようにする(Ruby/WEBrick)

あるファイルをローカルファイルシステムに置いて別のアプリケーションから利用したいが、 そのアプリケーションはネット上のリソースを使うことを前提としている、という場合があります。

たとえば Firefox でフィード(のファイル)を開くと、 ローカルのファイルを開いた場合と HTTP越しの場合とで表示が異なりますし、 ローカルのフィードはライブブックマークに登録できません。
他のフィードリーダや podcatcher もローカルのフィードに対応していなかったりします。
フィードを生成するプログラムを使っていて、 パラメータをいじって確認しながら試行錯誤したいのに……と。

また、all rights reserved なコンテンツなど外部に公開できない場合も困ります (アクセスを制限する方法は何かしらあるんでしょうけど)。

Yapra メモ

すいません、ぜんぜん整理されてません。 書きかけです。気が向いたら追記・修正などします。

インストール

gem install yapra

簡単。

Feed::Custom の apply_template_after_extracted

2010-02-23 / Ruby 1.8.7 / Yapra 0.1.4

"<%= title %>" だと
NameError in 'undefined local variable or method `title' for #<Yapra::Plugin::Feed::Custom:0xb6f32b5c>'
などと言われるので、
"<%= item.title %>" のように item. を付ける。

実行中の plugin の中で他の plugin を呼び出す

他の plugin の呼び出し - yapra | Google グループ

-d (--configfile-direcotry)

2011-02-01

設定ファイルをディレクトリに入れて -d で指定するとまとめて実行してくれる。
参考: とりあえずネタ振り的なものを - yapra | Google グループ

XPath の確認方法

とりあえず 2つだけ。

Ruby 1.9.2 + Yapra 0.1.3 での動作

2010-01-13 とりあえず RSS::load/save だけで試したところ、 2、3ヶ所修正するとエラーを出さずに動いた。

2011-01-20 本家に反映してもらえました → Commit 8d130c03fc6a4c3379624c5178818b3574029d23 to yuanying's yapra - GitHub

プラグインのディレクトリ

とりあえずネタ振り的なものを - yapra | Google グループ から引用:

今のところ、yapra本体にあるpluginディレクトリは、

- legacy_plugin: pragger 由来のプラグイン
- plugin: pragger作法のプラグイン
- lib-plugin: クラスベースのプラグイン

と、分けておいていますが自作のプラグインは基本的に自分で管理
することになると思います。

クラスベースのプラグインならばLoadPathが通った場所にあ
ればいいので、
一番良いのは gem にしてインストールするか、
もしくは自分で site_ruby ? とかに置くことになると思います。

legacyなプラグインは基本的に自作しない方向で、
もし使うことになったら yapra の -p オプションで明
示的に指定。 

プラグインを gem のディレクトリに置きたくない

プラグインを好きなディレクトリに置いて yapra のオプション -p (--plugindir) で指定する。

たくさん出るエラーメッセージのようなものについて

実行すると次のようなメッセージがずらずらと出るが、 "WARN" とある行は警告で、たとえば Googleカレンダーを使わない場合でも 「Feed::google_calendar がないよ」というメッセージが出たりしている。 そもそも関係ないので無視してオッケー(だと思う)。

W, [2010-09-21T04:43:02.684261 #28748]  WARN -- : Feed::google_calendar can't load, because: no such file to load -- gcalapi
W, [2010-09-21T04:43:02.689784 #28748]  WARN -- : Feed::hatena_graph can't load, because: no such file to load -- hatena/api/graph
W, [2010-09-21T04:43:02.723983 #28748]  WARN -- : Publish::google_calendar can't load, because: no such file to load -- gcalapi
...

じゃあ warn の行だけフィルタすればいいじゃない、ということで yapra -c foo.yaml 2>&1 | grep -v -i warn とするといいのかもしれないが、 見えていた方がいい警告まで除外されてハマったりするのも嫌なので結局は気にしないのがいいのかも。

追記: --log-level オプションも参照

エラーへの対処

--log-level オプションを使う。

パイプライン

参考: 他の plugin の呼び出し - yapra | Google グループ

関連記事

参考(外部リンク)

(書きかけ)Ruby 1.9.x メモ

適当に追記・修正する予定。


2011-01-14

1.8.7
ruby-1.8.7-p330 :001 > defined? Gem
 => nil 
ruby-1.8.7-p330 :002 > require "rubygems"
 => true 
ruby-1.8.7-p330 :003 > defined? Gem
 => "constant" 

1.9.2
ruby-1.9.2-p136 :001 > defined? Gem
 => "constant" 

2011-01-12
ruby 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]


[1, 2].each do |x|
  [3, 4].each do |x|
    puts "  %d" % x
  end
  puts x
end
$ ruby -W test.rb
test.rb:2: warning: shadowing outer local variable - x
  3
  4
1
  3
  4
2

2011-01-12
ruby 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]


require "pathname"

pn = Pathname("~")
p pn.class
p "x" + pn.to_s
p "x" + pn
$ ruby test.rb
Pathname
"x~"
test.rb:6:in `+': can't convert Pathname into String (TypeError)
	from test.rb:6:in `<main>'

2011-01-12
ruby 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]


x = 1

case x
when 1 : true
end
$ ruby test.rb
test.rb:4: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n'
when 1 : true
        ^

参考: 2009-01-31 「Ruby 1.9の歴史が始まる」1.9系初の安定版1.9.1正式リリース - ニュース:ITpro今まで非公式に使えていたthenの代わりのコロン(:)がif/unlessやcase構文で使用できなくなった

Ruby: 文字列と unicode escape sequence(\uXXXX形式) を相互変換

以下は Ruby 1.8.7、 json_pure 1.4.6 の組み合わせで確認しました。 Ruby 1.9系でも同じように動くようです。

ただし、JSON.utf8_to_json_ascii はユーザが直接呼び出すことを想定していないように見えるので、 クリティカルなところで使うのは危ないかもしれません。


# -*- coding: utf-8 -*-
require "rubygems"
require "json/pure" # gem install json_pure

escaped = JSON.utf8_to_json_ascii("abc123あいう")
p    escaped #=> "abc123\\u3042\\u3044\\u3046"
puts escaped #=> abc123\u3042\u3044\u3046

unescaped = JSON.parse( %Q{["#{escaped}"]} )[0]
p    unescaped #=> "abc123\343\201\202\343\201\204\343\201\206"
puts unescaped #=> abc123あいう

関連記事

参考(外部リンク)

日本の国会議員のサイトでCCLが使われているか調べてみたが、どこも使っていなかった

※ CCL = クリエイティブ・コモンズ・ライセンス

トップページだけしか調べていませんが、結果としては CCL が使われているサイトはありませんでした。

国会議員のリストは 政治家WEBリンク集 のものを使わせてもらいました。

参考: 日本の国会議員の名前とウェブサイトのURLのリストを得るRubyスクリプト - 再発明日記

一覧をもとに Rubyスクリプトで一括処理しました。 CCL が使われているかどうか以下のメソッドで判定しました。 ccREL などのマークアップが正しく行われているかを調べるのが目的ではなく、 なるべく手間をかけずにざっくりと調べられればよいという程度のものです。


# -*- coding: utf-8 -*-
# for Ruby 1.8.7

require "open-uri"
require "kconv"

def find_license(url)
  begin
    html = Kconv.toutf8( open(url).read )
  rescue => e
    STDERR.puts e.message
    return [nil, nil, nil, nil]
  end

  rel_license = cc_org = cc_ja = cc_by = nil
  rel_license = true if /rel=["']license["']/i      =~ html
  cc_org      = true if /creativecommons\.org/      =~ html
  cc_ja       = true if /クリエイティブ・?コモンズ/ =~ html
  cc_by       = $&   if /.{8}CC[  ]BY.{8}/i        =~ html
  
  [rel_license, cc_org, cc_ja, cc_by]
end

関連記事

参考(外部リンク)



** ホームに戻る

<< 前のページ | 次のページ >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。