GAE Pythonでログ出力する方法

2011-08-25
このエントリーをはてなブックマークに追加

Python+Djangoで開発しているときはprintで出力できるからいいのですが、GAEだとPrintするとブラウザ上に表示されてしまって困ります。

あ、ハセテツはDjangoで開発するときはコンソールでrunserverしているので、printがコンソール上に表示されるんです。

import logging

logging.getLogger().setLevel(logging.DEBUG)
logging.debug(‘ログメッセージ’)

これだけですね。これでGoogleAppEngineLauncherから起動したLog Consoleに表示されます。

「logging.getLogger().setLevel(logging.DEBUG)」はなくても大丈夫です。その場合、「debug」じゃなくて「info」で出力されます。

まぁ、debugにしておけば本番運用時には出力されないってことでしょうね。

Tags: ,

GAE(Python)でYahoo!知恵袋APIを叩いてXMLをパースする

2011-08-17
このエントリーをはてなブックマークに追加

PHPでYahoo!知恵袋APIを叩く方法は先日書いたので、今度はPythonで。しかもGAEを使ってみようかと。

# -*- coding: utf-8 -*-

from django.http import *
from django.shortcuts import render_to_response
from google.appengine.api import urlfetch
from xml.dom import minidom
import logging
import urllib

def index(request):

_url = “http://chiebukuro.yahooapis.jp/Chiebukuro/V1/questionSearch?appid=「自分で取得するアプリID」&query=”+ urllib.quote(‘焼肉’)
_result = urlfetch.fetch(_url)
_dom = minidom.parseString(_result.content)
_list = _dom.getElementsByTagName(“Question”)

for item in _list:

logging.info(u”ID:%srn” % item.getElementsByTagName(‘Id’)[0].firstChild.data)
logging.info(u”質問:%srn” % item.getElementsByTagName(‘Content’)[0].firstChild.data)
logging.info(u”回答:%srn” % item.getElementsByTagName(‘BestAnswer’)[0].firstChild.data)

return render_to_response(‘index.html’)

まぁ、これだけなんです。あ、Django使ってます。が、その部分は関係ないですね。XMLのパースはもうちっとスマートにならないかなあ。これはモジュールを知らないだけかなぁ。

ちなみに、BestAnswerがないと、というか、ノードに値がないとエラーが出ます。ので、実際に使う場合はその判定が必要になりますね。

 

Tags: ,

PHPでYahoo!知恵袋APIを叩く

2011-08-10
このエントリーをはてなブックマークに追加

なんの脈絡もなくPHPで、しかもYahoo!のAPIなんですけど、知人と話しているときにふとそんな話になりまして。以前RubyやPythonでYahoo!の形態素解析API叩いたことはあったんですけど、PHPで、しかもYahoo!知恵袋APIってなかったなーと思って書いてみました。

結論、超簡単。自分の慣れもあるんだろうけど、一番あっさりかけた。Rubyで書いたときはその時使ったXMLパーサの仕様だったと思うのですがxmlnsの扱いにひどく手間取った記憶があります。

が、PHPの場合XML文書をオブジェクトに変換してくれる便利な関数があったので一発で完了。正直、拍子抜けなレベルでした。

<?
$req = “http://chiebukuro.yahooapis.jp/Chiebukuro/V1/questionSearch?appid=「自分で取得するアプリID」&query=”.urlencode(‘焼肉’);
$xml = simplexml_load_file($req);

foreach($xml->Result->Question as $item){
echo “質問:”.$item->Content.”rn”;
echo “質問ID:”.$item->Id.”rn”;
echo “ベストアンサー:”.$item->BestAnswer.”rnrn”;
}
?>

これだけで「焼肉」で検索して質問と質問IDとベストアンサーを取得できます。まぁ参照だけならこんなもんですよね。

API経由で質問したり回答したりもできるんですけど、その場合はOAuthでの認証が必要みたいですね。まぁOAuthなんてTwitterAPI叩いたことある人なら楽勝でしょ。

PHPはささっと書けてささっと動いてくれるので好きです。いいフレームワークがあればPHPをメインにしてもいいかと思うくらい。

うーん、PHP用のマイクロフレームワーク、作っちゃおうかなぁ。

Tags: