ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2011年7月20日水曜日

twitterのOAuth認証

OAuthっていうのは、
APIを使用する認証を行うための仕様のことで、
パスワードを第3者に教えることなく、トークンのやり取りだけで認証が行えるしくみのことです。

OAuthってなんなのかは、
ゼロから学ぶOAuthが参考になるとおもいます。

で、実際にtwitterでOAuth認証をおこなって、
つぶやくためのスクリプトを書きました。

まず、
http://dev.twitter.com/apps/
でアプリケーション登録を行います。
(登録には、twitterアカウントが必要です。)
で。Consumer Keyと Consumer Scretを取得します。

で、rubyのOAuthライブラリを使って、
下記のコードを書きました。

#!/usr/bin/ruby
require 'rubygems'
require 'oauth'

consumer = OAuth::Consumer.new(
  "Consumer Key",
  "Consumer Secret",
  :site => "http://twitter.com"
)
token = consumer.get_request_token
puts token.authorize_url #リダイレクト先のURL
pin = gets.chop
access_token = token.get_access_token(:oauth_verifier => pin)
puts access_token.token #アクセストークン のtoken
puts access_token.secret # アクセストークンの secret

token.authorize_url のURLをブラウザに貼付けてページ遷移すると、
リダイレクト先にpinコードが書いてあるので、
それをコピーして入力します。

そうすると、Accessトークンを取得することができます。

CosumerトークンとAccessトークン
あとは、twitterライブラリあたりで、
twitter APIを叩けばOKです。
以下は、ただ、"Hello, World" をつぶやくスクリプトです。

#!/usr/bin/ruby
require 'rubygems'
require 'twitter'
require 'twitter/console'

Twitter::Client.configure do |conf|
  conf.oauth_consumer_token = "Consumer Key",
  conf.oauth_consumer_secret =   "Consumer Secret",
end

twitter_client = Twitter::Client.new(:oauth_access => {
  :key => "Access Token Key",
  :secret => "Access Token Secret"
})

twitter_client.status(:post, "Hello, World");

2009年7月24日金曜日

rubyとCの可変長引数

rubyに可変長引数が書けることを知らなかったので、覚書。

*を使えば可変長引数を配列として受け取れるようだ。

引数の1つ前に*を入れれば、その位置の引数を配列として受け取れる。

def max(first, *rest)
  max = first
  rest.each {|x| max = x if x > max }
  max
end
と書いて、

max(1,2,3)

と書けば、first1, rest[2,3]になるようだ。

ちなみに、C言語での可変長引数は以下のようになる。

以下は第1引数で渡す数字の個数を、残りの引数をデバッグプリントとする関数です。

#include 
#include   /* 可変長引数に必要な変数 */

void foo(int i, ...)
{
  int j;
  va_list ap;

  va_start(ap, i);  /* ポインタ引数apを引数iの次の位置に持っていく */
  for (j = 0; j < i; j++) {
    printf("%d\n", va_arg(ap, int));  /* 型を指定してapから、値をとりだす*/
  }
  va_end(ap);
}

int main(void)
{
  foo(3, 1, 2, 3);
  return 0;
}
でも可変長引数って基本使いませんよね。
だから忘れちゃうんですよね;