DjangoでOauth認証を経由してTwitterAPIを叩く方法

2010-09-29
このエントリーをはてなブックマークに追加

先にはっきりいっておきます。tweepyみたいなパッケージ使った方がずっと楽だとおもいます。自分でもそう思っていたのですが、後々Facebook等々への応用もあったのでOAuthの流れを理解しておくためにOauth2だけで書いてみました。以前Railsで書いた「RubyonRailsでOAuth経由でTwitterのタイムラインを取得する」のDjango版です。Djangoというか、Python版ですね。

「Oauth2も使わないで書けよ」というツッコミは覚悟の上です。w

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.http import *
from xml.etree.ElementTree import *
import urllib
import oauth2 as oauth

request_token_url = 'http://twitter.com/oauth/request_token'
access_token_url = 'http://twitter.com/oauth/access_token'
authorize_url = 'http://twitter.com/oauth/authorize'

timeline_url = "http://api.twitter.com/1/statuses/user_timeline.xml"

consumer_key = 'consumer_key '
consumer_secret = 'consumer_secret '

consumer = oauth.Consumer(key=consumer_key, secret=consumer_secret)

def index(request):

    client = oauth.Client(consumer)
    resp, content = client.request(
                    request_token_url,
                    'POST',
                    body=urllib.urlencode(
                    	{
                    		'oauth_callback':
                    		'http://127.0.0.1:8000/callback/'
                    	}
                    )
               )

    request_token = {}
    for item in content.split('&'):
        _data = item.split('=')
        request_token.update({_data[0]: _data[1]})

    request.session['request_token'] = request_token
    return HttpResponseRedirect("%s?oauth_token=%s"
                                % (authorize_url, request_token['oauth_token']))

def callback(request):
    request_token = request.session['request_token']
    token = oauth.Token(request_token['oauth_token'],
                        request_token['oauth_token_secret'])
    client = oauth.Client(consumer, token)

    _dict = {
            'oauth_token': request.GET['oauth_token'],
            'oauth_verifier': request.GET['oauth_verifier'],
        }

    resp, content = client.request(
    					access_token_url,
    					"POST",
    					body=urllib.urlencode(_dict)
    				)

    access_token = {}
    for item in content.split('&'):
        _data = item.split('=')
        access_token.update({_data[0]: _data[1]})

    request.session['access_token'] = access_token

    return HttpResponseRedirect('/timeline/')

def timeline(request):

    access_token = request.session['access_token']

    token = oauth.Token(access_token['oauth_token'],
    		access_token['oauth_token_secret'])
    client = oauth.Client(consumer, token)
    _result = client.request(timeline_url, 'GET')

    _statuses = _result[1]
    xmlString = urllib.unquote_plus(_statuses.encode('utf-8'))
    elem = fromstring(xmlString)
    for element in elem.findall("status"):
        print element.find('text').text

    return render_to_response('index.html')
DjangoのViewだけ書きました。template側での処理はまったくないです。
流れとしては、
  1. 認証用クライアント作ってリクエストトークンを作る。ここで一度リクエストトークン作成用URLにアクセス。
  2. リクエストトークンに書かれた文字列をくっつけて認証用画面に遷移(ここはTwitter側の画面)。
  3. 「許可」をクリックすると、リクエストトークンで指定したURLに帰って来る。
  4. 帰ってきたときには認証用のベリファイ文字列が着いてくるので、それらを使ってアクセストークン作成。
    ここはアクセストークン作成用のURLにアクセスする。
  5. 帰ってきたアクセストークンに「oauth_token」と「oauth_token_secret」 があり、以降はこれつかってアクセスする。

サンプルはXMLで受信してます。ヘッダとボディに分かれているので、ボディだけXMLとして扱ってパースしました。サンプルはつぶやいた内容だけを書き出しています。

Tags: ,

FFMPEGを使って動画を携帯向け(3gp/mpeg4)に変換する

2010-09-28
このエントリーをはてなブックマークに追加

どんなコンテンツを作っても「それ携帯で使えるの?」という問い合わせは必ずあるんです。ちょっと前までは携帯で動画なんて観ることは無かったけど、今は大半の機種でQVGA以上の動画が再生できるようなので、携帯でも気軽に動画を楽しめるんですね。

ffmpeg -y -i 変換元ファイル -r 30 -fs 280000 -vcodec mpeg4 -vb 64k -s 320×240 -acodec libfaac -ar 48000 video.3gp

ちなみに、Softbank向けのオプションです。実機で再生確認済みです。DoCoMoでも再生できるかもしれませんが、もしかすると音が出ないかも。音声コーデックだけ違うとか勘弁して欲しい。w

勝手サイト前提なので配信する動画ファイルは300kb以下という制限があります。最新の情報は調べ切れていないのですが、確かSoftbankは300kb以下だったと。もう、300kbなんて、数秒しか再生できないです。「-fs 280000」で280000b以下、というオプションにしてあります。300000と指定すると若干はみ出ます。

大半の機種でQVGAサイズが再生できると思いますが、古い機種まで対応したいというのであれば、サイズをQCIF(176×144)にすればよいかと。あとは15fpsにしてビットレートも変えないといけないかもですね。

FFMPEGの構築に関しては長くなるので割愛します。が、configureくらいは書き残しておきます。

–enable-version3 –enable-libx264 –enable-libfaac –enable-libfaad –enable-libmp3lame –enable-gpl –enable-nonfree –enable-shared –enable-libopencore-amrwb –enable-libopencore-amrnb

iPhoneでも再生できるようにしたかったのと、HTML5対応とか考えてh.264も入れてみました。

LTEもくるし、スマートフォンも増えるだろうし、動画ってPCサイトだけのものじゃなくなりますね。

MySQLのwhere句で正規表現を使う

2010-09-09
このエントリーをはてなブックマークに追加

できるんだろうと思いつつ、実際使ったことはありませんでした。今回必要に迫られて(まぁ使わなくてもなんとかなったのですが)調べてみたら期待以上に簡単で、非常に便利だったのでメモ。

SELECT * FROM TBL_HOGE WHERE ITEM_CODE REGEXP ‘[a-zA-Z]{1,}-[0-9]{1,4}’

条件の部分はフツーの正規表現です。細かい点に関してはきちんと調べきっていないのですが、期待した結果は得られました。同じような抽出条件の場合、Like検索と正規表現でのパターンマッチ、どっちが速いんでしょうね。

MySQL5.0、CentOS5.2での動作確認です。

Tags:

iPhoneアプリ第二弾をリリースしました

2010-09-03
このエントリーをはてなブックマークに追加

告知が遅くなりましたが、iPhoneアプリの第二弾をリリースしました。その名も「Calculate10」。連続して表示される10個の数字を計算していくだけのアプリです。

単純だけど、なかなか難しいですよ。まぁ経理をやっている友人にハードモードを瞬殺されましたが。w

日本人はそろばんやってるひとが多いので、そういう人には簡単みたいです。

現在、すでに「スーパーハード」と「ベリーベリーハード」なモードの追加中です。

ぜひお試しください。

Tags: ,