<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OpenService &#187; Google</title>
	<atom:link href="http://openservice.jp/category/google/feed/" rel="self" type="application/rss+xml" />
	<link>http://openservice.jp</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 13 Oct 2009 08:22:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google Sidewiki API：任意のサイトに紐づいた情報を残す</title>
		<link>http://openservice.jp/2009/09/google_sidewiki_api/</link>
		<comments>http://openservice.jp/2009/09/google_sidewiki_api/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 02:02:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[企業]]></category>
		<category><![CDATA[海外]]></category>
		<category><![CDATA[無料]]></category>
		<category><![CDATA[GData]]></category>
		<category><![CDATA[Google Sidewiki API]]></category>
		<category><![CDATA[Wiki]]></category>
		<category><![CDATA[コメント]]></category>

		<guid isPermaLink="false">http://openservice.jp/2009/09/google_sidewiki_api/</guid>
		<description><![CDATA[Googleにしては珍しいサービス。Google Sidewikiは新しいGoogleツールバーから呼び出せる機能で、任意のサイトにコメントや情報を残すことが出来る。同様のソフトウェア、サービスは既に多数存在しており、一度は使ったことがあるのではないだろうか。以前、ニコニコブックマークというサービスもあったが、あれに近いイメージだ（見せ方は異なるが）。大抵のサービスがユーザ数が思ったよりも集まらなかったり、データを残した結果が面白さにつながらなかったして、継続的な利用が難しいのが実情だ。


Googleの場合はどうだろうか。Googleツールバー必須のままであったら面白みはあまりなかっただろう。だがWeb APIという強力な武器があれば、使える場面は多いかも知れない。例えばオリジナルのコメントシステムは止めて、Google Sidewikiに保存するようにしてしまったり、そもそもコメントシステムのないサイトでもGoogle Side Wiki APIを使えばコメントシステムが実装できるようになる。


Google Side Wiki APIは言わずと知れたGDataに則って作られているので、既に存在するGData向けクライアントライブラリが利用できるはずだ。またそれに対応しているということは、データの参照はもとより追加や削除といった操作もできるはずだ（今は参照のみで、投稿はできない）。
仕組みとしてはURLや投稿者をキーとして、そこに紐づいたデータを取得すると言う形式だ。データの取得だけであればフィードで出力されているので取り込むのはさほど難しくはない。投稿するインタフェースはないが、AuthSubなどの認証には対応している。
なお、現在はラボ用のサービスなので、将来的になくなる可能性もあるのでその点は注意が必要だ。前述の通り、同種のサービスは既に多数存在しているし、それらの状況はGoogleが知らないはずはない。そのような中リリースするということは、Web APIをはじめとした独自の施策があるはずだ。
　
Google Sidewiki API &#8211; Google Code
　http://code.google.com/intl/ja/apis/sidewiki/
]]></description>
			<content:encoded><![CDATA[<p>Googleにしては珍しいサービス。Google Sidewikiは新しいGoogleツールバーから呼び出せる機能で、任意のサイトにコメントや情報を残すことが出来る。同様のソフトウェア、サービスは既に多数存在しており、一度は使ったことがあるのではないだろうか。以前、ニコニコブックマークというサービスもあったが、あれに近いイメージだ（見せ方は異なるが）。大抵のサービスがユーザ数が思ったよりも集まらなかったり、データを残した結果が面白さにつながらなかったして、継続的な利用が難しいのが実情だ。</p>
<p>
<img src="http://openservice.jp/wp-content/uploads/oservice/picture.png" width="161" height="145" alt="picture.png" /></p>
<p>Googleの場合はどうだろうか。Googleツールバー必須のままであったら面白みはあまりなかっただろう。だがWeb APIという強力な武器があれば、使える場面は多いかも知れない。例えばオリジナルのコメントシステムは止めて、Google Sidewikiに保存するようにしてしまったり、そもそもコメントシステムのないサイトでもGoogle Side Wiki APIを使えばコメントシステムが実装できるようになる。</p>
<p></p>
<p><span id="more-187"></span></p>
<p>Google Side Wiki APIは言わずと知れたGDataに則って作られているので、既に存在するGData向けクライアントライブラリが利用できるはずだ。またそれに対応しているということは、データの参照はもとより追加や削除といった操作もできるはずだ（今は参照のみで、投稿はできない）。</p>
<p>仕組みとしてはURLや投稿者をキーとして、そこに紐づいたデータを取得すると言う形式だ。データの取得だけであればフィードで出力されているので取り込むのはさほど難しくはない。投稿するインタフェースはないが、AuthSubなどの認証には対応している。</p>
<p>なお、現在はラボ用のサービスなので、将来的になくなる可能性もあるのでその点は注意が必要だ。前述の通り、同種のサービスは既に多数存在しているし、それらの状況はGoogleが知らないはずはない。そのような中リリースするということは、Web APIをはじめとした独自の施策があるはずだ。</p>
<p>　</p>
<p><b>Google Sidewiki API &#8211; Google Code</b><br />
　<a href="http://code.google.com/intl/ja/apis/sidewiki/">http://code.google.com/intl/ja/apis/sidewiki/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2009/09/google_sidewiki_api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今日は最初のレーザーが作られた日、だそうです。</title>
		<link>http://openservice.jp/2008/05/first_laser_day/</link>
		<comments>http://openservice.jp/2008/05/first_laser_day/#comments</comments>
		<pubDate>Fri, 16 May 2008 01:48:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[検索]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/05/first_laser_day/</guid>
		<description><![CDATA[
Googleのホーム
もはやGoogleと読むこともできないロゴ…。本日は最初のレーザーができた記念日だそうです。

first laser &#8211; Google Search
　http://www.google.com/search?q=first+laser
Google
　http://www.google.com/webhp?rls=ig
]]></description>
			<content:encoded><![CDATA[<p><a href="http://openservice.jp/wp-content/uploads/oservice/171.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/17-tm1.jpg" width="440" height="325" alt="ピクチャ 17.png" /></a></p>
<p><strong>Googleのホーム</strong></p>
<p>もはやGoogleと読むこともできないロゴ…。本日は最初のレーザーができた記念日だそうです。</p>
<p><a href="http://openservice.jp/wp-content/uploads/oservice/184.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/18-tm4.jpg" width="440" height="325" alt="ピクチャ 18.png" /></a></p>
<p><strong>first laser &#8211; Google Search</strong><br />
　<a href="http://www.google.com/search?q=first+laser">http://www.google.com/search?q=first+laser</a></p>
<p><strong>Google</strong><br />
　<a href="http://www.google.com/webhp?rls=ig">http://www.google.com/webhp?rls=ig</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/05/first_laser_day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ついにGoogleドキュメントがオフライン対応に！</title>
		<link>http://openservice.jp/2008/04/google_docs_on_gears/</link>
		<comments>http://openservice.jp/2008/04/google_docs_on_gears/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 00:50:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/04/google_docs_on_gears/</guid>
		<description><![CDATA[ようやくという感じもしますが、GoogleドキュメントがGoogle Gearsに対応し、オフラインでも利用できるようになりました。なお、現状は言語を英語にした場合にのみ出てくる機能のようです。


オフラインで編集中
　
オフラインモードにすると、新規の作成はできなくなります。また、画像の挿入も不可となります。また、ダウンロード機能も使えないようです。他、検索機能が使えないと言った、そうなるだろうなと思われる機能は利用できないようですが、文書の編集に関しては問題なさそうです。予め挿入してある画像は問題なく表示されます。


最初の同期処理中
　

完了しました。これでオフラインになっても大丈夫です。
　
ただ残念なのはスプレッドシートとプレゼンテーションです。スプレッドシートは、表示のみのモードになるようです。こちらは編集不可です。また、プレゼンテーションは対応していません。現状ではGoogleドキュメント専用の機能となっているようです。


オフラインで編集した文書。なお、スプレッドシートやプレゼンテーションは未対応
　
Webアプリケーションの弱点としてよく挙げられるオフラインでの利用ができるようになれば、Googleドキュメントの利用者ももっと増えそうですね。
　
Google Docs
　http://docs.google.com/
]]></description>
			<content:encoded><![CDATA[<p>ようやくという感じもしますが、Googleドキュメントが<a href="http://gears.google.com/">Google Gears</a>に対応し、オフラインでも利用できるようになりました。なお、現状は言語を英語にした場合にのみ出てくる機能のようです。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/232.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/23-tm1.jpg" width="440" height="295" alt="ピクチャ 23.png" /></a><br />
<strong>オフラインで編集中</strong></p>
<p>　</p>
<p>オフラインモードにすると、新規の作成はできなくなります。また、画像の挿入も不可となります。また、ダウンロード機能も使えないようです。他、検索機能が使えないと言った、そうなるだろうなと思われる機能は利用できないようですが、文書の編集に関しては問題なさそうです。予め挿入してある画像は問題なく表示されます。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/212.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/21-tm2.jpg" width="440" height="170" alt="ピクチャ 21.png" /></a><br />
<strong>最初の同期処理中</strong></p>
<p>　</p>
<p><a href="http://openservice.jp/wp-content/uploads/oservice/223.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/22-tm3.jpg" width="440" height="147" alt="ピクチャ 22.png" /></a></p>
<p><strong>完了しました。これでオフラインになっても大丈夫です。</strong></p>
<p>　</p>
<p>ただ残念なのはスプレッドシートとプレゼンテーションです。スプレッドシートは、表示のみのモードになるようです。こちらは編集不可です。また、プレゼンテーションは対応していません。現状ではGoogleドキュメント専用の機能となっているようです。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/241.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/24-tm1.jpg" width="440" height="76" alt="ピクチャ 24.png" /></a><br />
<strong>オフラインで編集した文書。なお、スプレッドシートやプレゼンテーションは未対応</strong></p>
<p>　</p>
<p>Webアプリケーションの弱点としてよく挙げられるオフラインでの利用ができるようになれば、Googleドキュメントの利用者ももっと増えそうですね。</p>
<p>　</p>
<p><strong>Google Docs<br />
<span style="font-weight: normal;">　<a href="http://docs.google.com/">http://docs.google.com/</a></span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_docs_on_gears/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Googleの2008年第一四半期決算が発表。まだまだ売上拡大中</title>
		<link>http://openservice.jp/2008/04/google_2008_q1/</link>
		<comments>http://openservice.jp/2008/04/google_2008_q1/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 23:01:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/04/google_2008_q1/</guid>
		<description><![CDATA[広告の方式が変更され、クリック数が減っていると言われて不安が漂っていたのですが、それでも売上は拡大中のようです。
via Liveblogging Google Q1 Earnings Report—Fears Were Overblown
　
利益は2007年の第四四半期から7%アップの52億ドル、純収益は13億1000万ドルで8%アップだそうです。
頭脳が流出し、さらにクリック数が低下しているのにも関わらず収益が上がっていくというのは…単なる技術集団ではないということですね。株価は若干下がった様子なので、それでもなお期待したほどではなかったということでしょうか。


Google Finance
]]></description>
			<content:encoded><![CDATA[<p>広告の方式が変更され、クリック数が減っていると言われて不安が漂っていたのですが、それでも売上は拡大中のようです。</p>
<p>via <a href="http://www.techcrunch.com/2008/04/17/liveblogging-google-q1-earnings-report%e2%80%94fears-were-overblown/">Liveblogging Google Q1 Earnings Report—Fears Were Overblown</a></p>
<p>　</p>
<p>利益は2007年の第四四半期から7%アップの52億ドル、純収益は13億1000万ドルで8%アップだそうです。</p>
<p>頭脳が流出し、さらにクリック数が低下しているのにも関わらず収益が上がっていくというのは…単なる技術集団ではないということですね。株価は若干下がった様子なので、それでもなお期待したほどではなかったということでしょうか。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/26.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/2-tm.jpg" width="440" height="278" alt="ピクチャ 2.png" /></a><br />
<a href="http://finance.google.com/finance?q=NASDAQ%3AGOOG">Google Finance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_2008_q1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Codeが各国言語にローカライズ</title>
		<link>http://openservice.jp/2008/04/google_code_for_japanese/</link>
		<comments>http://openservice.jp/2008/04/google_code_for_japanese/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 02:26:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/04/google_code_for_japanese/</guid>
		<description><![CDATA[もちろん日本語も。
GoogleのWeb APIやオープンソースホスティングサービスなどを提供するGoogle Codeが各国言語にローカライズされました（日本語、中国語、ポルトガル語、ロシア語、スペイン語）。まだコンテンツ全てが対応した訳ではなく、表面的な一部のみではありますが。これで随分受け入れられやすくなったのではないでしょうか。


Google Codeのトップページ。日本語ローカライズされています。
　

Web APIの概要ページ。ここも日本語化されています。ここ以下は日本語でない場合が多いです。
Google Chart API やGoogle Maps APIは日本語化されているようです。
　
開発者ホーム &#8211; Google Code
　http://code.google.com/intl/ja/
]]></description>
			<content:encoded><![CDATA[<p>もちろん日本語も。</p>
<p>GoogleのWeb APIやオープンソースホスティングサービスなどを提供するGoogle Codeが各国言語にローカライズされました（日本語、中国語、ポルトガル語、ロシア語、スペイン語）。まだコンテンツ全てが対応した訳ではなく、表面的な一部のみではありますが。これで随分受け入れられやすくなったのではないでしょうか。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/14.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/14-tm.jpg" width="440" height="278" alt="ピクチャ 14.png" /></a><br />
Google Codeのトップページ。日本語ローカライズされています。</p>
<p>　</p>
<p><a href="http://openservice.jp/wp-content/uploads/oservice/153.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/15-tm3.jpg" width="440" height="278" alt="ピクチャ 15.png" /></a><br />
<strong>Web APIの概要ページ。ここも日本語化されています。ここ以下は日本語でない場合が多いです。</strong></p>
<p><a href="http://code.google.com/intl/ja/apis/chart/">Google Chart API</a> や<a href="http://code.google.com/intl/ja_ALL/apis/maps/">Google Maps API</a>は日本語化されているようです。</p>
<p>　</p>
<p><strong>開発者ホーム &#8211; Google Code</strong><br />
　<a href="http://">http://code.google.com/intl/ja/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_code_for_japanese/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Googleから検索数急上昇中のワード一覧「Google 急上昇ワード」が登場＆そのURL</title>
		<link>http://openservice.jp/2008/04/google_term_trend_and_xml_url/</link>
		<comments>http://openservice.jp/2008/04/google_term_trend_and_xml_url/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 22:42:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Webサービス]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/04/google_term_trend_and_xml_url/</guid>
		<description><![CDATA[Google内で検索されているワードの、急上昇中のものをリストアップするサービス、Google 急上昇ワードがリリースされました（via グーグル、日本オフィス発の「Google 急上昇ワード」を提供:マーケティング [ CNET Japan ]）。


iGoogleで表示したもの
　
なんでこのワードが、みたいなものもリストアップされていますがマーケティング的には役立つデータになるのではないでしょうか。でも使い勝手が悪く、iGoogleかモバイルからしか確認できないそうです。
が、こちらのURLからであればいつでも取得でき、さらにXML形式なので加工が容易になります。ワードの出典（はてなキーワード、WIkipedia、Yahooニュースなど）も載っているので、こちらのが便利そうですね。


iGoogleで使われているワード一覧の内容
]]></description>
			<content:encoded><![CDATA[<p>Google内で検索されているワードの、急上昇中のものをリストアップするサービス、Google 急上昇ワードがリリースされました（via <a href="http://japan.cnet.com/marketing/story/0,3800080523,20371485,00.htm">グーグル、日本オフィス発の「Google 急上昇ワード」を提供:マーケティング</a> [ CNET Japan ]）。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/6.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/6-tm.jpg" width="440" height="367" alt="ピクチャ 6.png" /></a></p>
<p><strong>iGoogleで表示したもの</strong></p>
<p>　</p>
<p>なんでこのワードが、みたいなものもリストアップされていますがマーケティング的には役立つデータになるのではないでしょうか。でも使い勝手が悪く、iGoogleかモバイルからしか確認できないそうです。</p>
<p>が、<a href="http://www.google.com/m/services/trends/get">こちらのURL</a>からであればいつでも取得でき、さらにXML形式なので加工が容易になります。ワードの出典（はてなキーワード、WIkipedia、Yahooニュースなど）も載っているので、こちらのが便利そうですね。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/52.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/5-tm1.jpg" width="440" height="277" alt="ピクチャ 5.png" /></a><br />
<a href="http://www.google.com/m/services/trends/get">iGoogleで使われているワード一覧の内容</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_term_trend_and_xml_url/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google App Engineを試す（1）</title>
		<link>http://openservice.jp/2008/04/google_app_engine_1/</link>
		<comments>http://openservice.jp/2008/04/google_app_engine_1/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 00:30:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[海外]]></category>
<category></category>
		<guid isPermaLink="false">http://openservice.jp/2008/04/google-app-engine%e3%82%92%e8%a9%a6%e3%81%99%ef%bc%881%ef%bc%89/</guid>
		<description><![CDATA[
Google App Engineのプロジェクトページ
続くのかどうかは不安ですが。
とりあえずPythonもよくわかっていない（import文があること、インデントが重要ということくらいしか分からない）状態ではじめてみるのですが。Google App Engineのリファレンスを参考にすると、次の機能が使えるようです。

ログインシステム
データストア
テンプレートエンジン

そこでゲストブックを参考に、機能を付け加えてみました。
まずありがちなHello Worldです。
適当な場所にgoogleappsというディレクトリを作成します。
$ mkdir googleapps
その中にapp.ymlと言うファイルを作成します。
$ cat googleapps/app.yml
ファイルを編集します。内容は以下のようになります。

application: moongift-sample
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
script: helloworld.py
ここで、application: の後はGoogle App Engineで取得した名称になります。Scriptは実行するスクリプトファイル名です。後はgoogleapps/helloworld.pyを作成し、次のように記述します。
print &#8216;Content-Type: text/plain&#8217;
print &#8221;
print &#8216;Hello, world!&#8217;
これで実行すると、Hello, World!が出るはずです。

$ dev_appserver.py googleapps
INFO 2008-04-09 08:44:23,960 appcfg.py] Checking for updates to the SDK.
INFO 2008-04-09 08:44:24,451 appcfg.py] The SDK is up to date.
INFO 2008-04-09 08:44:24,485 dev_appserver_main.py] Running application moongift-sample on port 8080: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://openservice.jp/wp-content/uploads/oservice/15.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/15-tm.jpg" alt="ピクチャ 15.png" height="319" width="440" /></a><br />
<a href="http://code.google.com/appengine/"><strong>Google App Engine</strong></a><strong>のプロジェクトページ</strong></p>
<p>続くのかどうかは不安ですが。</p>
<p>とりあえずPythonもよくわかっていない（import文があること、インデントが重要ということくらいしか分からない）状態ではじめてみるのですが。Google App Engineのリファレンスを参考にすると、次の機能が使えるようです。</p>
<ul>
<li>ログインシステム</li>
<li>データストア</li>
<li>テンプレートエンジン</li>
</ul>
<p>そこでゲストブックを参考に、機能を付け加えてみました。</p>
<p>まずありがちなHello Worldです。</p>
<p>適当な場所にgoogleappsというディレクトリを作成します。</p>
<p>$ mkdir googleapps</p>
<p>その中にapp.ymlと言うファイルを作成します。</p>
<p>$ cat googleapps/app.yml</p>
<p>ファイルを編集します。内容は以下のようになります。</p>
<p><code><br />
application: moongift-sample<br />
version: 1<br />
runtime: python<br />
api_version: 1<br />
handlers:<br />
- url: /.*<br />
script: helloworld.py</code></p>
<p>ここで、application: の後はGoogle App Engineで取得した名称になります。Scriptは実行するスクリプトファイル名です。後はgoogleapps/helloworld.pyを作成し、次のように記述します。</p>
<p>print &#8216;Content-Type: text/plain&#8217;</p>
<p>print &#8221;</p>
<p>print &#8216;Hello, world!&#8217;</p>
<p>これで実行すると、Hello, World!が出るはずです。</p>
<p><code><br />
$ dev_appserver.py googleapps<br />
INFO 2008-04-09 08:44:23,960 appcfg.py] Checking for updates to the SDK.<br />
INFO 2008-04-09 08:44:24,451 appcfg.py] The SDK is up to date.<br />
INFO 2008-04-09 08:44:24,485 dev_appserver_main.py] Running application moongift-sample on port 8080: http://localhost:8080<br />
</code></p>
<p>ということなので、localhost:8080にアクセスします。</p>
<p>では次のステップとして、フレームワークを使って処理をきちんと分けてみます。</p>
<p><span id="more-88"></span></p>
<p>フレームワークを使う場合は、以下のファイルをimportする必要があります。</p>
<p><code><br />
import wsgiref.handlers<br />
from google.appengine.ext import webapp<br />
</code></p>
<p>この状態で、次のように記述すると処理分けができます。</p>
<p><code><br />
class MainPage(webapp.RequestHandler):<br />
def get(self):<br />
self.response.headers['Content-Type'] = 'text/plain'<br />
self.response.out.write('Hello, webapp World!')</code></p>
<p><code>def main():<br />
application = webapp.WSGIApplication(<br />
[('/', MainPage)],<br />
debug=True)<br />
wsgiref.handlers.CGIHandler().run(application)</code></p>
<p><code>if <em>name</em> == “<em>main</em>”:<br />
main()<br />
</code></p>
<p>これを見て予想できる通り、http://localhost:8080/へのアクセスは、MainPageというクラスの処理に飛ばされます。そして、def getと書かれているのはgetアクセスした場合に呼ばれるもののようです。同様にdef postが使えます。<a href="http://code.google.com/appengine/docs/webapp/requesthandlers.html">ここ</a>によれば、put/delete/head/options/traceが使えるそうです。</p>
<p>次に認証処理です。これは、</p>
<p><code><br />
from google.appengine.api import users<br />
</code></p>
<p>を頭に追記する必要があります。これだけでGoogle認証が利用できるようになります。そして、</p>
<p><code><br />
user = users.get_current_user()<br />
</code></p>
<p>これでユーザ認証済みかどうかが分かります。</p>
<p><code><br />
if user:<br />
self.response.headers['Content-Type'] = 'text/plain'<br />
self.response.out.write('Hello, ' + user.nickname())<br />
else:<br />
self.redirect(users.create_login_url(self.request.uri))<br />
</code></p>
<p>このように記述して処理分けできます。ごく簡単です。次はデータの受け渡しです。</p>
<p><code><br />
self.request.get('content')<br />
</code></p>
<p>これでフォームからのデータが受けられるようです。もちろん、HTML側では</p>
<p><code><br />
&lt;form action=”/sign” method=”post”&gt;<br />
&lt;div&gt;&lt;textarea name=”content” rows=”3” cols=”60”&gt;&lt;/textarea&gt;&lt;/div&gt;<br />
&lt;div&gt;&lt;input type=”submit” value=”Sign Guestbook”&gt;&lt;/div&gt;<br />
&lt;/form&gt;<br />
</code></p>
<p>のように記述されている必要があります。これもごくシンプルです。</p>
<p>最後がデータのストアです。これは</p>
<p><code><br />
from google.appengine.ext import db<br />
</code></p>
<p>を追加した上で、新しいクラスを作成する必要があります。モデルのようなものです。</p>
<p><code><br />
class Greeting(db.Model):<br />
author = db.UserProperty()<br />
content = db.StringProperty(multiline=True)<br />
date = db.DateTimeProperty(auto_now_add=True)<br />
</code></p>
<p>このようなクラスです。これだけでデータベースが利用できるようになります。スキーマの定義を書いて実行して、といった手間がないのでごく簡単です。もちろん、開発環境（ローカル）でも使えます。</p>
<p>後は次のように呼び出して使うだけです。</p>
<p><code><br />
def post(self):<br />
greeting = Greeting()<br />
if users.get_current_user():<br />
greeting.author = users.get_current_user()<br />
greeting.content = self.request.get('content')<br />
greeting.put()<br />
self.redirect('/')<br />
</code></p>
<p>greetingモデルを新しく作って、それにコンテンツを当てはめて、最後にputメソッドで保存処理を実行という流れです。これでゲストブックの流れが出来上がりです。実際のソースは以下のようになります。</p>
<p><code><br />
#!-*- coding:utf-8 -*-<br />
import cgiimport wsgiref.handlers<br />
from google.appengine.api<br />
import usersfrom google.appengine.ext<br />
import webappfrom google.appengine.ext import db</code></p>
<p>class LogoutPage(webapp.RequestHandler):<br />
def get(self):<br />
self.redirect(users.create_logout_url(&#8221;/&#8221;))</p>
<p>class LoginPage(webapp.RequestHandler):<br />
def get(self):<br />
self.redirect(users.create_login_url(&#8221;/&#8221;))</p>
<p>class MainPage(webapp.RequestHandler):<br />
def get(self):<br />
self.response.out.write(&#8217;&lt;html&gt;&lt;body&gt;&#8217;)</p>
<p>if users.get_current_user():<br />
self.response.out.write(&#8217;&lt;div&gt;&lt;a href=&#8221;/logout&#8221;&gt;Logout&lt;/a&gt;&lt;/div&gt;&#8217;)<br />
else:<br />
self.response.out.write(&#8217;&lt;div&gt;&lt;a href=&#8221;/login&#8221;&gt;Login&lt;/a&gt;&lt;/div&gt;&#8217;)</p>
<p>greetings = db.GqlQuery(&#8221;SELECT * FROM Greeting ORDER BY date DESC LIMIT 10&#8243;)<br />
for greeting in greetings:<br />
if greeting.author:<br />
self.response.out.write(&#8217;&lt;b&gt;%s&lt;/b&gt; wrote:&#8217; % greeting.author.nickname())<br />
else:<br />
self.response.out.write(&#8217;An anonymous person wrote:&#8217;)</p>
<p>self.response.out.write(&#8217;&lt;blockquote&gt;%s&lt;/blockquote&gt;&#8217; % cgi.escape(greeting.content))<br />
# Write the submission form and the footer of the page<br />
self.response.out.write(&#8221;"&#8221; &lt;form action=&#8221;/sign&#8221; method=&#8221;post&#8221;&gt; &lt;div&gt;&lt;textarea name=&#8221;content&#8221; rows=&#8221;3&#8243; cols=&#8221;60&#8243;&gt;&lt;/textarea&gt;&lt;/div&gt; &lt;div&gt;&lt;input type=&#8221;submit&#8221; value=&#8221;Sign Guestbook&#8221;&gt;&lt;/div&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt;&#8221;"&#8221;)</p>
<p>class Guestbook(webapp.RequestHandler):<br />
def get(self):<br />
self.redirect(&#8217;/')</p>
<p>def post(self):<br />
greeting = Greeting()<br />
if users.get_current_user():<br />
greeting.author = users.get_current_user()<br />
else:<br />
self.redirect(users.create_login_url(self.request.uri))<br />
return</p>
<p>greeting.content = self.request.get(&#8217;content&#8217;)<br />
greeting.put()<br />
self.redirect(&#8217;/')</p>
<p>class Greeting(db.Model):<br />
author = db.UserProperty()<br />
content = db.StringProperty(multiline=True)<br />
date = db.DateTimeProperty(auto_now_add=True)</p>
<p>def main():<br />
application = webapp.WSGIApplication( [<br />
('/', MainPage),<br />
('/sign', Guestbook),<br />
('/logout', LogoutPage),<br />
('/login', LoginPage)<br />
], debug=True)<br />
wsgiref.handlers.CGIHandler().run(application)</p>
<p>if __name__ == &#8220;__main__&#8221;: main()</p>
<p><a href="http://openservice.jp/wp-content/uploads/oservice/16.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/16-tm.jpg" alt="ピクチャ 16.png" height="319" width="440" /></a><br />
<strong>作ってみたデータストアするゲストブック</strong></p>
<p>本当はもっと簡潔にかけるのだろうけど、Pythonビギナーのため分かりません。とりあえず<a href="http://moongift-sample.appspot.com/">ここ</a>で動作していることは確認済みです。とりあえず試してみた限りでは、</p>
<ul>
<li>Python分かりづらいよPython</li>
<li>クラスを分けた方が良いよね</li>
<li>GQLってなんぞ</li>
<li>ローカルで開発している時もデータベースが使えるのがすごい</li>
<li>ついでに認証も使える。ただし任意のメールアドレス</li>
<li>routeの仕組みがもっと動的にできないものかな</li>
<li>本格的な作り込みをしようと思うと、色々テクニックが必要そう</li>
</ul>
<p>Pythonはインデントの強く意識して書かないと（当たり前ですが）いけないのが大変ですね。いつがクラスの終わりなのか、メソッドの終わりなのかが分かりづらい状態です。リクエストのハンドリングが多くなりがちなので、ここが自動的に振り分けられると便利かなぁ…。</p>
<p>GQLはO/Rマッピングを使えばあまり意識せずに使えるらしいですが、複雑な場合は覚えないといけないでしょうね。後、Ajaxを簡単に使えたりするのでしょうか。</p>
<p>最後にリリースです。リリースもCUIで行います。</p>
<p>$ appcfg.py update googleapps</p>
<p>にてファイルがアップロードされて、使えるようになります。</p>
<p>ファーストインプレッションはこのくらいで。可能性は多いにあると思いますので、ぜひ触ってみてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_app_engine_1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GoogleからAmazon EC2/S3/SimpleDB対抗プロジェクトが登場「Google App Engine」</title>
		<link>http://openservice.jp/2008/04/google_app_engine/</link>
		<comments>http://openservice.jp/2008/04/google_app_engine/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 13:08:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[Webサービス]]></category>
		<category><![CDATA[海外]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/04/google_app_engine/</guid>
		<description><![CDATA[

Google App Engineロゴ
　
GoogleからAmazonのEC2/S3/SimpleDB対抗プロジェクトとでも言うべきGoogle App Engineが登場しました。これはPythonベースのWebアプリケーションを開発し、それを動作させる環境を提供してくれるWebサービスです。
利用はまずSDKをダウンロードするところから始まります。現在ベータ版のため、ユーザ登録後にメールでお知らせがくる形式になっています。SDK自体はWindows、Mac OSX、Linuxやその他の環境向けのパッケージが提供されています。Google Apps Engine自体はオープンソースのプロジェクトになっています。


SDKダウンロードページ
　
そして、SDKをインストールし、さらにユーザ登録も完了したら開発開始です。
開発はPythonを使って行います。YAMLを使って設定を定義して、ローカル環境で動作確認ができます。その結果をコマンドベースでGoogle App Engineへ投げれば、Google上で動作させられるようになります。
注目すべきはGoogleのデータ管理システムであるBigTableを利用できる点です。データベースを定義し、GQLと呼ばれるSQLに似た言語を使ってデータを取得、更新、作成できるようになります。
Pythonということで若干敷居が高い感もありますが、これを機に習得してみるのも良いかもしれません。なお、フレームワークはDjangoとのことです。
個人的にはベータサービスの内にどれだけの言語に対応してくるか、またサービスの機能が増えていくかが気になります。例えばRuby/RailsやPHP、Perlといった言語への対応や、独自ドメインの対応などが気になります。また、ImageMagickや特殊なライブラリを利用している場合にどう対応してくるかも気になるところです。これらが解決してくると、相当面白いことになりそうです。
　
Google App Engine &#8211; Google Code
　http://code.google.com/appengine/
]]></description>
			<content:encoded><![CDATA[<p>
<img src="http://openservice.jp/wp-content/uploads/oservice/appengine-lowres.jpg" width="100" height="79" alt="appengine_lowres.jpg" style="margin-left:10px;" /><br />
<strong>Google App Engineロゴ</strong></p>
<p>　</p>
<p>GoogleからAmazonのEC2/S3/SimpleDB対抗プロジェクトとでも言うべきGoogle App Engineが登場しました。これはPythonベースのWebアプリケーションを開発し、それを動作させる環境を提供してくれるWebサービスです。</p>
<p>利用はまずSDKをダウンロードするところから始まります。現在ベータ版のため、ユーザ登録後にメールでお知らせがくる形式になっています。SDK自体はWindows、Mac OSX、Linuxやその他の環境向けのパッケージが提供されています。Google Apps Engine自体はオープンソースのプロジェクトになっています。</p>
<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/103.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/10-tm2.jpg" width="440" height="279" alt="ピクチャ 10.png" /></a></p>
<p><strong>SDKダウンロードページ</strong></p>
<p>　</p>
<p>そして、SDKをインストールし、さらにユーザ登録も完了したら開発開始です。</p>
<p>開発はPythonを使って行います。YAMLを使って設定を定義して、ローカル環境で動作確認ができます。その結果をコマンドベースでGoogle App Engineへ投げれば、Google上で動作させられるようになります。</p>
<p>注目すべきはGoogleのデータ管理システムであるBigTableを利用できる点です。データベースを定義し、GQLと呼ばれるSQLに似た言語を使ってデータを取得、更新、作成できるようになります。</p>
<p>Pythonということで若干敷居が高い感もありますが、これを機に習得してみるのも良いかもしれません。なお、フレームワークはDjangoとのことです。</p>
<p>個人的にはベータサービスの内にどれだけの言語に対応してくるか、またサービスの機能が増えていくかが気になります。例えばRuby/RailsやPHP、Perlといった言語への対応や、独自ドメインの対応などが気になります。また、ImageMagickや特殊なライブラリを利用している場合にどう対応してくるかも気になるところです。これらが解決してくると、相当面白いことになりそうです。</p>
<p>　</p>
<p><strong>Google App Engine &#8211; Google Code</strong><br />
　<a href="http://code.google.com/appengine/">http://code.google.com/appengine/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/04/google_app_engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gmailのアドレス帳にアクセスできる「Google Contacts Data API」</title>
		<link>http://openservice.jp/2008/03/google_contacts_data_api/</link>
		<comments>http://openservice.jp/2008/03/google_contacts_data_api/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 05:45:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[アドレス帳]]></category>
		<category><![CDATA[メール]]></category>
		<category><![CDATA[海外]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/03/google_contacts_data_api/</guid>
		<description><![CDATA[

Contacts Data API &#8211; Google Code
　http://code.google.com/apis/contacts/

Google Contacts Data APIを使えばGmailのアドレス帳にWeb API経由でアクセスできるようになります。vCard形式ではなく、GData形式での取得、更新になります。新しいコンタクトを追加することもできるので、別なアプリケーションのアドレス帳と同期をとるような使い方も考えられます。
項目の詳細がドキュメント化されていないようで、詳細は未確認ですが、Gmailに登録したアドレス帳のほぼ全てのデータが取得できるようです。25件ずつのリストで取得したり、検索して結果を得ることができます。
Rubyでのデータ取得の方法は、Rails 2.0 » RubyでGoogle Contacts Data APIを呼び出すを参照してください。
]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://openservice.jp/wp-content/uploads/oservice/101.jpg"><img src="http://openservice.jp/wp-content/uploads/oservice/10-tm.jpg" width="440" height="276" alt="ピクチャ 10.png" /></a></p>
<p><strong>Contacts Data API &#8211; Google Code</strong><br />
　<a href="http://code.google.com/apis/contacts/">http://code.google.com/apis/contacts/</a></p>
<p></p>
<p>Google Contacts Data APIを使えばGmailのアドレス帳にWeb API経由でアクセスできるようになります。vCard形式ではなく、GData形式での取得、更新になります。新しいコンタクトを追加することもできるので、別なアプリケーションのアドレス帳と同期をとるような使い方も考えられます。</p>
<p>項目の詳細がドキュメント化されていないようで、詳細は未確認ですが、Gmailに登録したアドレス帳のほぼ全てのデータが取得できるようです。25件ずつのリストで取得したり、検索して結果を得ることができます。</p>
<p>Rubyでのデータ取得の方法は、<a href="http://rails20.jp/2008/03/ruby_google_contacts_data_api/">Rails 2.0 » RubyでGoogle Contacts Data APIを呼び出す</a>を参照してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/03/google_contacts_data_api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google/Twitter/Facebook/Netflixにログインしているかどうか知る方法</title>
		<link>http://openservice.jp/2008/03/are_you_logged_in_google/</link>
		<comments>http://openservice.jp/2008/03/are_you_logged_in_google/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 13:11:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[海外]]></category>

		<guid isPermaLink="false">http://openservice.jp/2008/03/are_you_logged_in_google/</guid>
		<description><![CDATA[JavaScriptレベルで、今Googleにログインしているかどうか分かるという手法の説明です。他にもTwitter/Facebook/Netflixといったサービスにログインしているかどうかも分かるようになっています。


さすがにユーザIDなどは分からないようですが、一歩間違うと怖いですね。
How to Tell if a User is Logged In to Google &#8211; kentbrewster.com
　http://kentbrewster.com/how-to-tell-if-a-user-is-logged-in-to-google/
]]></description>
			<content:encoded><![CDATA[<p>JavaScriptレベルで、今Googleにログインしているかどうか分かるという手法の説明です。他にもTwitter/Facebook/Netflixといったサービスにログインしているかどうかも分かるようになっています。</p>
<p>
<img src="http://openservice.jp/wp-content/uploads/oservice/2.jpg" width="480" height="309" alt="ピクチャ 2.png" /></p>
<p>さすがにユーザIDなどは分からないようですが、一歩間違うと怖いですね。</p>
<p><strong>How to Tell if a User is Logged In to Google &#8211; kentbrewster.com</strong><br />
　<a href="http://kentbrewster.com/how-to-tell-if-a-user-is-logged-in-to-google/">http://kentbrewster.com/how-to-tell-if-a-user-is-logged-in-to-google/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://openservice.jp/2008/03/are_you_logged_in_google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
