Home > Python

Python Archive

Google App EngineのUser-Agent

この記事の所要時間: 354

Google App Engine(GAE)からHTTPアクセスするときのUser-Agentについて。

GAE上のアプリケーションがHTTPアクセスする際にどのようなUser-Agentになるかを調べてみました。環境は、Python2.5.4 + Google App Engine SDK 1.3.1 です。

GAE+PythonからHTTPアクセスするには幾つかの方法があるのですが、urllib2を使う方法とGAEのモジュールであるurlfetchモジュールを使う方法について見ています。

urllib2

urllib2でアクセスした場合のUser-Agentです。

特徴的なのは「AppEngine-Google」が付いているのとアプリケーションIDである「appid: XXXX」が付加されていることですね。アプリケーションIDはGAE上の各アプリケーションに割り振るIDで一意となります。

もしGAE上のあるアプリケーションからのアクセスを制御(許可、拒否等)したい場合は、このアプリケーションIDを見れば可能です。

"Python-urllib/2.5 AppEngine-Google; (+http://code.google.com/appengine; appid: XXXX),gzip(gfe)"

urlfetch

urlfetchでアクセスした場合です。

urllib2と比較すると「Python-urllib/2.5」が無い他は同じですね。

"AppEngine-Google; (+http://code.google.com/appengine; appid: XXXXX),gzip(gfe)"

User-Agentを変更した場合

urllib2でもurlfetchでもUser-Agentを変更することができるので、変更してアクセスしてみました。

# -*- coding: utf-8 -*-
url = "http://www.exaple.com/"

# urllib2
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'PHP5.3.2')]
try: opener.open(url)
except: pass

# urlfetch
from google.appengine.api import urlfetch
urlfetch.fetch(url, headers={'User-Agent': 'CakePHP1.2.6'})

結果はどちらも変更したUset-Agentにはなっているのですが、AppEngine-Google以降の文字列が付加されています。もちろんappid:も付いているので、User-Agentを変更していてもアプリケーションIDによるアクセス制御は可能です。

urllib2

"PHP5.3.2 AppEngine-Google; (+http://code.google.com/appengine; appid: XXXXX),gzip(gfe)"

urlfetch

"CakePHP1.2.6 AppEngine-Google; (+http://code.google.com/appengine; appid: XXXXX),gzip(gfe)"

urllib2でUser-Agentを変更しない場合に「Python-urllib/2.5」が付くのは内部的にUser-Agentを設定しているだけの話です。

アクセス制御はアプリケーションIDで

GAEではサーバ環境を全ユーザで共有するので、IPアドレスでの制限はできません。(GAE全体からのアクセスを制限することはできるかもしれませんが。)

ただアプリケーションIDであればアプリケーション固有に付いている値なので、これを使えば特定のアプリケーションに対してだけ制御が可能です。User-AgentへのアプリケーションID付与(appid:)はGAE自体が行うので今のところ信頼して問題無いと思います。

時間が経つ毎に進化していくGAEですが、こういったところも気が利いていますね。

[参考] Apacheでアクセス制限 mod_access – Apache HTTP サーバ

appengine ja night #4とPython Hack-a-thon #3に参加してきました&LT資料

この記事の所要時間: 319

週末にappengine ja night #4Python Hack-a-thon #3 に参加してきました。


2010年、初勉強会です。

どちらもこれまで参加することの無かったイベントなのですが、こうした場所に参加したくなるのも Google App Engine(GAE)をやり出して興味が広がった効果ですね。

appengine ja night #4ではBT(Beer Talk)もやってきました。

他の方の発表も参加される方の雰囲気も事前には良く分からない状況だったのですが、ほぼ全員の方がはじめましての状況だったので自己紹介も兼ねて話してきました。

いざやってみると、とても良い雰囲気で、突っ込みあり、笑いありですごく話しやすかったです。ありがとうございました。

資料を見てもあまり役に立たない気もしますが、いちおうアップしました。

以下、雑感を。

appengine ja night #4

  • 会場はリクルートメディアテクノロジーラボさん。会場もキレイだし、スクリーンマルチだし、無線LANもあるしで、至れり尽くせり:-D
    => ありがとうございました。
  • 発表を聞くだけでなく、適時突っ込みを入れるスタイル。
    => 議論が深まって面白かったです。発表者は大変だと思いますけど:-D
  • 運営のみなさん、ありがとうございました。
  • 次回は来月開催だそうです。みんなやさしい人達だから、興味ある人は参加すると良いですよ。

Python Hack-a-thon #3

  • 会場はオラクルさん。マルチスクリーン、電源あり、無線LANあり、飲み物無料、キレイと、こちらも至れり尽くせり。
    => ありがとうございました。
  • 両日共にこんなに素晴らしい会場を無料で提供頂けるのは本当にありがたいことです。
  • hackathon初参加。
  • ワークショップはGAE+Facebookにちらっと参加して、あとはもくもく作ってました。
  • GAE+Facebookは連携して、友人一覧が出せたのでとりあえず満足:-D
  • その後はTwitterのOAuthを使った検証と新しいサービスの下調べを。
  • hackathonの時間はあっという間に終わっちゃいました。
  • PHPでも同じようなイベントをやっても良いかも。(関西でやろうかな。)
  • お昼やワークショップ、発表を通じて、普段あまり接することのない分野に触れられて刺激的でした。
  • 自主性をかなり求められるイベントなので、少し参加する人を選ぶイベントかも。オラクルさんの環境で作業したいがために参加する手もありますけどね:-D
  • 運営のみなさん、ありがとうございました。

興味が広がると

冒頭でも書きましたが、どちらも初参加のイベントだったので、初めてお会いする人ばかりでした。両イベントとも著名な方も多く参加されていたので、ミーハー気分な楽しみもありました:-D

新しいことをやりだすとRPGで新たな地図を手にしたように、これまで行けなかったところに行ける楽しみがあります。

また勉強会をやりたくなってきました。GAEの勉強会を関西でやってみましょうか。

はてブホットエントリーを見るWebサービス「hot.hatebu」を作りました

この記事の所要時間: 257

はてブホットエントリーを集計して見るWebサービス「hot.hatebu」を作りました。

はてブのホットエントリーを集計して一覧で見るサービスです。機能をざっくり挙げると以下です。

  • 「エントリ」「時間」「タグ」「ユーザ」の集計データを表示
  • 日付範囲を指定して、合算した集計データを表示
  • パネル機能

詳細については説明ページがありますので、こちらをどうぞ。
hot.hatebu | 説明ページ

ここでは作った経緯や使い方のポイントなどを。

週間はてブホットエントリーを見たい

そもそものきっかけは週間ホットエントリーを見たいというものでした。イベントやネットラジオなどで話す時のネタにホットエントリーを使うのですが、公式サイトでは一日単位で見る方法しかありません。

例えば、先週のホットエントリーをまとめて見る場合は1ページづつページを辿るしかありません。

そこで複数日のホットエントリーを合算して見られるサイトが欲しいと思いました。

あとちょうどGAEを試していたので、何か作ってみたいというのも理由の1つです。

平日は12時台、休日は23時台がピーク

実際にやってみて面白かったのが時間別のブックマーク数です。

平日と休日ではっきりと推移が異なります。

・平日(2009/12/07〜2009/12/11)
hot.hatebu | 2009/12/07〜2009/12/11の時間別

・休日(2009/12/12〜2009/12/13)
hot.hatebu | 2009/12/12〜2009/12/13の時間別

平日はオフィスで昼休みにRSS ReaderやTwitterからブックマーク、休日は家に帰って寝る前にWebを眺めてブックマーク、という使い方が多いのかもしれませんね。

パネル機能

あったら面白いなと思っておまけで付けた機能です。

勉強会やネットラジオをやる時、何となく話すネタが欲しい時ありませんか?そんな時にプロジェクタでこの画面を映して、表示されたエントリーについて話ができれば考えています。

イメージとしてはテレビのバラエティで見るパネルですね。

データは2009/12/01〜

データはまだ2009/12/01以降のものだけです。今後のデータは随時、追加していきます。

DataStoreで悩む

GAE+Pythonで作りました。

悩んだのはDataStore周りの実装ですね。どうしてもRDBMS感覚で作ってしまうので、パフォーマンスが出なかったり、30秒制限にひっかかったりで試行錯誤を繰り返しました。

TaskQueueを使う方法が分かってからは何とか形になりました。色々な制限があるGAEでは、TaskQueueをどう上手く使うかがキーですね。

無料のQuotaを超えて課金をはじめると分かりやすく「リソース浪費=コスト(金銭)の浪費」に繋がります。例えば、ロジックの組み方が悪くてCPUを無駄に使えばその分費用がかかります。これまで以上にチューニングや処理の分散化(ブラウザでできることはブラウザにやらせる)といったアプローチが重要になりそうです。

ホッテントリーは面白い

ホットエントリー、はてなブックマークのデータは題材として面白いですね。自分で作ってみても色々な見方ができて楽しいです。

ホッテエントリーのチェックに、話のネタ探しに、ブックマークの分析に使って頂ければ嬉しいです。

Ustream 録画動画のviewsをはてブ風に表示する

この記事の所要時間: 237

Ustreamで録画した動画のviews数をはてブ風に表示するサービスを作りました。

ust録画動画のURLを渡すと以下のように表示します。

64views

使い方

1. views数を表示する

このサービスではviews数をHTMLタグ+JavaScriptで出力します。views数を表示したいページで、以下のscriptタグを記述します。src属性のURLでviews数を表示したいust録画動画のURLを指定します。

<script type="text/javascript" src="http://www.u-st.tv/views?url=%ust録画動画のURL"></script>

ブラウザで見ると以下のタグが表示されます。

<span class="ust_views_10">64 views</span>

今はタグ表示だけですが、要望があればJSON出力とかも考えます。

2. CSS読み込み

はてブ風に表示するスタイルシートを用意しています。以下のスタイルシートを任意の場所に記述するなり、外部ファイルにして読み込むなりして下さい。

span.ust_views_1 {
  color: #f00;
  font-weight: normal;
  background-color: #fcc;
}
span.ust_views_10 {
  color: #f00;
  font-weight: bold;
  background-color: #fcc;
}

viewsが10未満なら「ust_views_1」、10以上なら「ust_views_10」がspanタグのclass属性に割り当てられます。見た目を変えたい方はスタイルシートで調整して下さい。

ブックマークレット

簡単なブックマークレットを作りました。ブラウザのブックマークツールバー等にドラッグして利用して下さい。

[http://www.ustream.tv/recorded/3535672

その状態でブックマークレットをクリックします。すると以下のようなHTMLタグが別窓に表示されます。

<a href="http://www.ustream.tv/recorded/3535672" target="_blank">第0回 Webなんたらかんたら 2009.12.28., shin1x1 on USTREAM. Radio</a><script type="text/javascript" src="http://www.u-st.tv/views?url=http://www.ustream.tv/recorded/3535672"></script>

あとはこのタグをblog等に貼れば、views数が表示されます。

第0回 Webなんたらかんたら 2009.12.28., shin1x1 on USTREAM. Radio

GAE+Pythonでさくっと

作りました。

独自ドメイン(u-st.tv)をGAEサイトに割り当てています。実はnaked domain(http://u-st.tv)にしたかったのですが、GAEでは割り当てができないようで、www.u-st.tvにしています。

あと表示の度にustream.comにリクエストを投げるのは非効率なので一定時間キャッシュするようにしているので、ご注意を。

使い方も簡単なので、ust動画リンクのお供に使ってみて下さい。

御座候のTwitter botを作りました

この記事の所要時間: 111

御座候という回転焼き(a.k.a. 「今川焼き」「大判焼き」「二重焼き」「びっくり饅頭」)を知っていますか?

gozasorop

関西ではメジャーな甘味であちこちの駅やショッピングセンターに店舗があります。

あんこがぎっしり詰まっているのですが、それほど甘みが強くないのでペロッといけちゃいます。寒くなってきたので、温かい御座候と渋めのお茶の組み合わせはたまりません。

そんな御座候。毎日でも食べたい勢いなのですが、事務所の近くには店舗が無く、Twitterで想いをつぶやく日々(1, 2)が続いていました。

せめて、写真だけでも!ということで、Twitterでbotを作りました。良かったらフォローして下さい。

@gozasoro

フォローしておけば、良い感じの時間に御座候に関する内容をつぶやきます。タイムラインに御座候アイコンが登場すると嬉しくなります:-D

ちょい技術話

GAE+Pythonで作りました。

日本語文字列の扱いでちょっと躓いたりしましたが、やっぱりGAE+Pythonは良いです。あとPHPの良さも再認識したりもします。

今回も色々なサイトのノウハウを拝借したので、ある程度溜まったら自分からもアウトプットします。

というわけで、これからの季節にぴったりな御座候。タイムラインにもどうぞ。

ちなみに私は赤あんが好きです。

冬が来るとPythonを書きたくなる

この記事の所要時間: 112

12月に入り、すっかり冬めいて来ました。

寒風吹きすさぶ中、家に帰って入るおこたの温かさ、たまりませんね。

さて、そんな冬がやってくると忘れてはならないのが、Pythonです。

python_logo

寒くなってくるとなぜかPythonを書きたくなるのは一部では周知の事実ですね。

例えば、私。

2007年

2007年冬、帯にある「Google言語」の文字につられて「みんなのPython」を買いました。正月休みはこれを読んでPythonで遊びました。

2008年

2008年冬、CakePHP漬けだったのになぜかPython関西勉強会で発表する機会があり、Djangoと戯れました。DjangoPHPというナゾのネタをやったのを先週思い出しました。

2009年

そして2009年冬、なぜか突然Python + GAEを始め、勢いでこんなエントリを書いたりしました。

どの年も突然はしかのようにPython書きたい病が発症しています。共通項はどれも冬の到来。これはもう何か因果関係があるように思えてなりません。

ということでPython書きたい病に感染した皆さん、冬期休暇はPython漬けを堪能しましょう。

この病の問題点は正月休みが明けた頃にびっくりするくらい症状が回復してしまうことです。今年は変種となり、早々と回復してしまわないようにと思います。

ホーム > Python

検索
フィード
メタ情報

Return to page top