黒川仁の文具堂ブログ三昧

Hitoshi Kurokawa, an engineer at Next SeeD

Archive for the ‘Ruby三昧’ tag

自分専用のTwitterクライアント クライアント名を自分で決める

2 comments

ひろゆきがTwitterを始めたようで

さっそくフォーローする。
今日はぽつぽつつぶやいている。

tw_hiroyuki

すぐにCNETの記事にもなっていた。

ひろゆき氏がTwitterを開始、その理由は……? CNET Japan Staff BLOG

西村氏によると、「今朝思いついて、そろそろやってみようかなと」とのこと。西村氏は過去に別のアカウントを作ってTwitterを使っていたが、最近はまったく使っていなかったそう。しかし、「今Twitterのクローンっぽいシステムを作っていて、そろそろちゃんと使わないと作り方がわからない」との理由でアカウントを再開設したとのことだ。ちなみにフォロワー数は11日21時時点で6000人超となっており、その数は急激に伸び続けている。

@hiroyuki_ni


自作ですー。 @koma_tz Twitterアプリは何を使っているんですか?><

ひろゆきがアプリを自作?
そして、クライアント名が「Paapeejpで」となっている。

Paapeejpってなんだ?聞かないクライアントだな。
と思ってたら自作ということはひろゆきが決めたアカウント名か。

そこでぴーん! ときた。
自分でクライアント名決められるのか。

Twitterの公式サイトからのツイートなら「webで」となるし
TweetDeckという専用クライアントでのツイートなら「TweetDeckで」となる

この「○○で」の○○の部分を決められるということだ。

RubyのクライアントでRSSからツイートするスクリプトをつくってcrontで回していたけど
「APIで」という素っ気ないものになっているのがなんとなく気になっていた。

しらべてみると、あるじゃないですか、自分でクライアント名を決める方法が。
何度かTwitterでみかけたOAuthという仕組みでできるようだ。

TwitterのbotをOAuthに対応させる しばそんノート

しかし実は、そういうセキュリティ的な事情以外にも、bot製作者的に「OAuthに移行したい!」と思わせる嬉しい利点がOAuthには用意されているのです。

それは投稿したTweetに表示される“クライアント名”を任意に設定できるということです。Web上でタイムラインを見たときに「webで」とか「Tweenで」とか表示されている部分ですね。

ありがたいことに、この参考記事もRubyで作成している。
gemのoauthというライブラリを利用する。

この通りで大体いけた。
じゃっかん、gemのjsonをインストールするのにつまずいたりしたけど大丈夫。
Ruby1.9を想定している記事みたいなので、パッチをあてるファイルをrequireしているけど
自分はRuby1.8系をつかっているので、逆にエラーがでてしまったのでコメントアウト。

require 'rubygems'
require 'oauth'
#require 'oauth-patch'
require 'json'

そしてテスト。

@krhitoshi

うまくTweetできるようになったみたいだ

tw_krhitoshi

めでたくクライアント名が「Terasonで」となった。
ちなみにTerasonは私のハンドルネームの一つです。

結局は自分で作ることになるんだね。

Written by 黒川仁(文具堂)

11月 12th, 2009 at 1:40 am

Rubyで通貨表示 3桁ごとにカンマ

4 comments

RubyのCGIで予約システム書いてて
金額を数字で扱っていて表示の時に通貨表示として
カンマを3桁ごとに表示したいとおもった。

Rubyでの数値の通貨フォーマット – CHNの中の人たちブログ

正規表現 – Rubyリファレンスマニュアル

上記のサイトを参考にしてIntegerにto_cというメソッドを
追加した。

class Integer
  def to_c
    str = to_s
    tmp = ""
    while(str.size > 3) do
      str.gsub!(/(.*\d)(\d\d\d)/,'\1')
      tmp = ",#{$2}" + tmp
    end
    str + tmp
  end
end

111222333.to_c  #  "111,222,333"

うえむらさんからのコメントでマイナスにも対応したものに修正してみました。

class Integer
  def to_c
    str = to_s
    tmp = ""
    while(str =~ /([-+]?.*\d)(\d\d\d)/) do
      str = $1
      tmp = ",#{$2}" + tmp
    end
    str + tmp
  end
end

-111.to_c      #  -11,222
-111222.to_c   # -111,222

最初は単純にサイトに書いてあるとおりに記述していたけど
テストして1,000~111,000にしか対応していないことに気づき
ちょっと修正した。

str.gsub!(/(.*\d)(\d\d\d)/, '\1,\2')

あと、メソッドに追加していたのはFixnumにだったけど
数が大きくなるとBignumになるので対応できないことにも気づく。

なので上位クラスのIntegerに追加することで解決。

Written by 黒川仁(文具堂)

4月 26th, 2009 at 10:23 pm

Posted in Ruby三昧

Tagged with , ,

Ruby 1.9.1って安定版なの?

leave a comment

Rubyをいつものごとくダウンロードしようとして

ふと文章にひっかかった。

Rubyダウンロード

  • 最新の安定版であるruby 1.9.1-p0[tar.bz2|tar.gz|zip]が各ミラーサイトから入手できます。
  • 前世代の安定版であるruby 1.8.7-p72[tar.bz2|tar.gz|zip]も各ミラーサイトから入手できます。

あれ?1.8系が前世代で1.9系が最新の安定版?

もちろん.1.8系の最新版をダウンロードしようとしたのだけれど。。。

そっか、バージョンの管理のしかたが変わったんだっけか。

1.9.1は安定版なんだ。ruby-listとってるのに最近読んでないな。

Ruby 1.9.1をリリースしました。これは1.9系統初の安定版リリースです。
Ruby 1.9はRubyの新しい系統です。近代的に、高速に、文法も明確に、多言語化
され、多くの改善がなされました。Ruby 1.8系統は2003年以来利用され、多くの
素晴らしい製品を生み出しました。本日、1.9の歴史が始まります。

なお、Ruby 1.8はまだ継続します。1.8.8は今年くらいにはリリースされるで
しょう。

ほんまや。1/31にリリースされとる。

といっても自分が使っているレベルではあんま変わんないかも。

でも、入れてつかってみたいな。うーん、どの環境も運用でつかっちゃってるし。。

Written by 黒川仁(文具堂)

2月 17th, 2009 at 12:59 am

Posted in Ruby三昧

Tagged with

RubyでWordPressへXML-RPC投稿

leave a comment

RubyにはXML-RPCクライアントのためのライブラリが
入っているので、スクリプトから標準でブログに投稿できる。

PHPでの投稿方法だが、この記事を参考にさせていただいた。

XML-RPCを使ってWordPressへ投稿する: のほほんやろうなFX

WordPressで作成したブログの場合はxmlrpc.phpが投稿先となる。

URI: http://example.com/xmlrpc.php

まずは、XML-RPC投稿を許可する設定をする。

[設定]->[投稿設定]
[リモート投稿]のXML-RPCにチェックを入れて設定を保存。

xmlrpc投稿を有効にする

これで、WordPress、 Movable Type、 MetaWeblog および Blogger XML-RPC
投稿プロトコルが有効になる。

各プロトコルの仕様については下記サイト参照。

WordPress本家 XML-RPC Support
http://codex.wordpress.org/XML-RPC_Support

require 'xmlrpc/client'

user = 'hogehoge'
pass = 'password'
publish = 1

server = XMLRPC::Client.new('example.com', '/xmlrpc.php')

struct = {
'title'=>'テスト投稿',
'description'=>'投稿内容投稿内容'
}

id = server.call("metaWeblog.newPost",1,user,pass,struct,publish)

puts "Post ID: #{id}"

簡単な投稿だけであれば、これだけでXML-RPC投稿が出来る。
publishを0にすれば「下書き」で登録される。

WordPress APIの仕様には新規投稿なくmetaWeblogで投稿することになる。

日付を入力して「下書き」にする場合は次の通り。
Timeでparseを使うには明示的にrequire ‘time’が必要です。

require 'time'
require 'xmlrpc/client'

user = 'hogehoge'
pass = 'password'
publish = 0
date = Time.parse('2010/02/13 12:22')

server = XMLRPC::Client.new('example.com', '/xmlrpc.php')

struct = {
'title'=>'テスト投稿2',
'description'=>'投稿内容投稿内容2',
'dateCreated'=>date
}

id = server.call("metaWeblog.newPost",1,user,pass,struct,publish)

puts "Post ID: #{id}"

dateCreatedの指定はちょっとシビアでエラーがでることもあるかもしれない。
文字列で色々設定してみたけどうまくいかない。

rubyの場合はTimeをそのまま渡してしまえば大丈夫らしいのので
それでよしとした。

Written by 黒川仁(文具堂)

2月 15th, 2009 at 10:34 pm

Posted in Ruby三昧

Tagged with , ,