Archive for the ‘Ruby’ Category
Twitter APIから取得したテキストのハイパーリンクを生成(Ruby)
Twitter APIから取得したテキストをHTMLに変換するための公式ライブラリ – xmallocのプログラミングノート.
昨夜このページを見つけてからRubyのライブラリについて調べたのですが、情報が乏しくて時間がかかりました。
Rubyのライブラリ自体は、見当を付けて、
sudo gem install twitter-text
でインストール出来ました。
使い方に関する情報はほとんど見つからず、
https://github.com/mzsanford/twitter-text-rb
の
README.rdoc
を参考にしました。
具体的には次のようにメソッドを定義しました。
require ‘rubygems’
require ‘twitter-text’
の宣言をやっておきます。
def html_link(x) include Twitter::Extractor usernames = extract_mentioned_screen_names(x) include Twitter::Autolink html = auto_link(x) return html end
というメソッドを定義しました。extract_mentioned_screen_namesに文字列の変数を渡すと、@付きのスクリーンネームを配列に取り込むようです。ここに格納されたものだけが、リンクの変換の対象になるみたいです。有効なアカウントのチェックもしているのかもしれないです。
それで再度auto_linkに文字列を渡しますが、ここでURLと、先ほど配列に登録されたTwitterのスクリーンネームがリンクに変換されるみたいです。
ちなみにirbで実行すると有効にはならないリンクが生成されました。単純に文字列を置換しているだけはなさそうです。
あとは次のような感じでメソッドを呼び出しています。使うのはツイートの本体部分のみです。
h[“text”] = html_link(i.text);
Rubyのコマンドライン引数
ちょっと適当に作ってみましたが、メモです。
実行結果:
u9x@G31M-U1104:~/tmp % ./optparse.rb こんにちは ありがとう いただきます
0 こんにちは
1 ありがとう
2 いただきます
スクリプトのコード:
#!/usr/bin/ruby -Ku
if ARGV.size > 0 then
0.upto(ARGV.size-1) do |x|
print “#{x} #{ARGV[x]}\n”
end
end
Rubyのコマンドラインオプション処理(optparse)
ややこしいですが、ある程度基本的なところは理解できてきました。使わないでいるとすぐに忘れそうなのでメモしておきます。
#!/usr/bin/ruby -Ku
require ‘optparse’
chk=false
OptionParser.new {|opt|
opt.on(‘-a VAL’) {|v|
chk = v; p “こちらは[]がないので引数は必須になっています。値をありがとうです。→ #{v}”
}
opt.on(‘-b’) {|v| chk=v; p “真偽値は、#{v}です。よろしくです!” }
opt.on(“-n”, “–nameset VALUE”, {“hi” => “hirono_hideki”, “ks” => “kokuhatu_hirono”}){|w|
p “こちらは[]がないので引数は必須になっています。値をありがとうです。→ #{w}”
}
opt.on(“-o”, “–osset [VALUE]”, {“ln” => “Linux”, “ub” => “Ubuntu 11.04”}){|w|
p w ||= “未定義です。引数はオプションなので代わりに入れました。よろしくです!”
}
opt.parse!(ARGV)
}
if (chk) then
p “#{chk} OK\n”
end
#実行例:
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -a xxx
#”こちらは[]がないので引数は必須になっています。値をありがとうです。→ xxx”
#”xxx OK\n”
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -b
#”真偽値は、trueです。よろしくです!”
#”true OK\n”
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -n ks
#”こちらは[]がないので引数は必須になっています。値をありがとうです。→ kokuhatu_hirono”
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -o
#”未定義です。引数はオプションなので代わりに入れました。よろしくです!”
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -o “値です。”
#”未定義です。引数はオプションなので代わりに入れました。よろしくです!”
#u9x@G31M-U1104:~/tmp % ./optparse3.rb -o ln
#”Linux”
#u9x@G31M-U1104:~/tmp %
ヒアドキュメントによる複数行文字列の作成 – 文字列 – Ruby入門
また「print」メソッドなどの引数に指定する場合は次のような記述方法となります。
また「print」メソッドなどの引数に指定する場合は次のような記述方法となります。
print(<<"EOS")
こんにちは
お元気ですか
ではさようなら
EOS
引用元: ヒアドキュメントによる複数行文字列の作成 – 文字列 – Ruby入門.
これは知らなかったです。初めての発見ですが、気になることはありました。ヒアドキュメントが使えなかったら”とかの処理に困るのです。特にHTMLは”が多いです。
LinuxとRubyでのクリップボード操作
CUIでクリップボードを操作する「Clipboard」 – MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ.
前にも何度か調べたことがあったのですが、「Ruby クリップボード Linux」などと検索をしても見つかるのはWindows環境のものばかりでした。地道に探せばあるに違いないとは思っていましたが、このページが解決のきっかけになりました。
git clone http://github.com/janlelis/clipboard
でダウンロードをしても中身は
CHANGELOG.rdoc Gemfile.lock README.rdoc VERSION doc spec
Gemfile LICENSE Rakefile clipboard.gemspec lib
な状態で、README.rdocをみると、
=== Non-gem requirements
* *Linux*: +xclip+, you can install it on debian/ubuntu with sudo apt-get install xclip
なことが書いてありました。別のソフトをすすめているようにも読めました。
require ‘clipboard’とあるぐらいだからgemにあるだろうと見当を付け、
sudo gem install clipboard
とやると、めでたくインストールできました。
なんかこの3つしか使い道はないみたいですが、これでも十分です。
=== Usage
You have Clipboard.copy,
Clipboard.paste and
Clipboard.clear
xclipというのもインストールしてみたのですが、ネットで調べても情報は少ないみたいでした。
http://d.hatena.ne.jp/aki-yam/20080705/1215209992
によると、
echo -n `pwd` | xclip -i -selection clipboard
という使い方をするみたいです。試すと使えました。
もともと自分は数年前からコマンドラインのクリップボード操作にはxselを使っていました。
pwd | xsel -b
同様のことはこれで出来ますが、よりシンプルです。これも情報の少ないコマンドでしたが、割と機能が多いです。manコマンドで見てもけっこうオプションの数があります。
Rubyで外部プログラムの呼び出しに変数を使う
Rubyで外部プログラムの呼び出しに変数を使う – 睡眠不足?!.
irb(main):043:0* $filename=”12665.tmp”
=> “12665.tmp”
irb(main):044:0> `xsel -b “再審請求の専用ブログ、そのまま金沢地方裁判所提出資料です。”
irb(main):045:0> `cat #$filename`
=> “xxxxx\nyyyyy\n”
という感じでirbでやってみたのですが、Rubyのコマンド置換演算子でシェルを呼び出してもリダイレクトは使えないみたいです。
Rubyでの標準入力からの変数代入と分岐処理
雛形みたいな感じで作ってみました。ファイル名には$$のプロセス番号を使っています。普通は処理が終わり次第削除する一時ファイルです。個人的にスクリプトはUNIXシステムに一体化したbashを使うことが多いです。
今回はTwitterAPIを操作するライブラリの関係で、Rubyでスクリプトを作成したのですが、余り使うこともないので忘れてしまうことが多いです。なお、ネットでちょこちょこ調べながら自己流で適当に作っています。
fw=File.open("#{$$}.tmp", "w");
puts "選択してください。's'で保存 'q'でスキップ 'Q'で終了";
while chk = gets.chomp
case chk
when 'q'
break;
when 's'
fw.write(`date`);
puts "保存しました。"
when 'Q'
fw.close;
exit;
else
puts "'s'で保存 'q'でスキップ 'Q'で終了"
end
end
fw.close;