地図ベースで周辺の飲食店を一括検索できるサービスを作ってみました。
ぐるめまっぷ
http://maps.igllry.com/
作っている最中に気づいたこと
・ ぐるなびのレスポンスが遅い!
・ Google Maps APIを使ってみたかったから地図を全面に押し出したけど、飲食店検索は必ずしも地図ベースが便利とは限らないかもしれない。
・ ぐるなびAPIと食べログAPIはJSONPが用意されていないので、ひと手間加える必要がある。
・ Google Maps APIでAdsenseを利用できるようになってた (記事)
利用しているサービス
[地図]
Google Maps API
http://code.google.com/intl/ja/apis/maps/
google-maps-icons
http://code.google.com/p/google-maps-icons/
[飲食店情報]
ぐるなび Webサービス
http://api.gnavi.co.jp/api/service.htm
ホットペッパー|リクルートWEBサービス
http://webservice.recruit.co.jp/hotpepper/
食べログAPI
http://tabelog.com/help/api/
[その他]
駅データ
http://www.ekidata.jp/index.html
Google App Engine
http://code.google.com/intl/ja/appengine/
2010年2月28日日曜日
[ぐるめまっぷ] ぐるなび/ホットペッパー/食べログの飲食店をまとめて検索できるサービス
2010年2月12日金曜日
Flickr をだら見できるFlickr Photo Streamをつくってみた
Flickrをだら見
Flickr Photo Stream
Flickrはこじゃれた写真が多いですな
[追記]
ヒマにまかせて、
Flickr TwitPic TweetPhoto Picasaの画像をダラ見できるページを作ってみた
Inspired by
日本人がうpしたTwitPicの画像をだら見できるTwitPic Stream (ja)ってのを作ったよ
FriendFeedに流れてきたTumblrの画像をだら見できるTumblr Photo Streamってのを作ったよ
2010年2月7日日曜日
海外の有名ブログに自作のjQueryのプラグインを紹介してもらったらアクセスがこんな感じになった
Webデベロッパー&デザイナー向けの有名ブログ Six Revisionsの下記の記事で自作のjQueryプラグイン Twit を紹介してもらいました。
15 Fantastic Finds on the Google Code Repository
http://sixrevisions.com/resources/15-fantastic...
Googleコードで公開されているあまり知られていない(?)色々なプロジェクトを紹介していて、興味深い記事です。
さっき確認したところ400以上Diggられてて、DiggのTechnologyカテゴリーでTopページに掲載されていました。
で、Google AnalyticsでTwitのデモページのアクセスをチェックしたら、
普段20~30程度のページビューが700まで跳ね上がってました。
これを多いと見るか少ないと見るか。
所詮 1/15 の扱いでしかないわけですし、こんなもんかな。
Google App Engine + Twitter + OAuthでTwitterにつぶやくためのメモ
TwiVoxからTwitterにつぶやくためにOAuthを利用してみました。
認証して投稿するという部分をメモしておきます。
TwitterでOAuthを扱うためのライブラリはいろいろあるのですが
(Twitter APIのWikiでも紹介されています)、
今回はAppEngine-OAuth-Libraryを利用してみます。
ちなみに、フレームワークとしてDjangoを利用します。
0. 準備
TwitterでOAuthを利用したアプリを作るためにはアプリを登録する必要があるので、はじめに下のURLからアプリを登録してください。
https://twitter.com/apps
1. 認証
from django.http import HttpResponseRedirect
import oauth
CONSUMER_KEY = 'アプリのConsumer key'
CONSUMER_SECRET = 'アプリのConsumer secret'
'''
認証を実行
'''
def signin(request):
# Twitterの認証が成功された場合にコールバックするURLを指定
callback_url = 'http://%s/twitter/callback/' % request.get_host()
client = oauth.TwitterClient(CONSUMER_KEY, CONSUMER_SECRET, callback_url)
return HttpResponseRedirect(client.get_authorization_url())
'''
コールバック
'''
def callback(request):
# Twitterからoauth_token, oauth_verifierというパラメータが返ってきます。
oauth_token = request.GET.get('oauth_token')
oauth_verifier = request.GET.get('oauth_verifier')
client = oauth.TwitterClient(CONSUMER_KEY, CONSUMER_SECRET, None)
user_info = client.get_user_info(oauth_token, oauth_verifier)
# ユーザー情報を保存
from model import TwitterUser
twitteruser = TwitterUser.all().filter('twitter_id =', user_info['id']).get()
if not twitterusr:
twitteruser = TwitterUser()
twitteruser.twitter_id = user_info['id']
twitteruser.username = user_info['username']
twitteruser.picture = user_info['picture']
twitteruser.token = user_info['token']
twitteruser.secret = user_info['secret']
twitteruser.oauth_verifier = oauth_verifier
twitteruser.save()
return HttpResponseRedirect('/u/%s/' % user_info['username'])2. 投稿
from django.http import Http404
from django.shortcuts import render_to_response
def post(request):
if request.method != 'POST': raise Http404;
# つぶやき
status = request.POST.get('status')
# 140文字以上だと反映されないので弾く
if len(status) > 140 or len(status) == 0:
return render_to_response('post.html',
{'error': 'Your Twitter message cannot be blank and cannot be longer than 140 characters.'},
context_instance=RequestContext(request))
# パラメータにつぶやきをセット
additional_params = {'status': status.encode('utf-8')}
# 返信の場合
in_reply_to_status_id = request.POST.get('in_reply_to_status_id')
if in_reply_to_status_id:
additional_params['in_reply_to_status_id'] = in_reply_to_status_id
client = oauth.TwitterClient(CONSUMER_KEY, CONSUMER_SECRET, None)
try:
# リクエストを投げる
# request.twitter_userに認証時に保存したユーザー情報が格納されているとします。
response = client.make_request('http://twitter.com/statuses/update.json',
token=request.twitter_user.token,
secret=request.twitter_user.secret,
additional_params=additional_params,
protected=True,
method='POST')
# JSONをパースする
from django.utils import simplejson as json
data = json.loads(response.content)
if data.has_key('error'):
logging.error(data['error'])
return render_to_response('post.html',
{'error': data['error']},
context_instance=RequestContext(request))
except Exception, e:
import traceback
logging.error(traceback.format_exc())
return render_to_response('index.html', context_instance=RequestContext(request))
2010年2月1日月曜日
MySQLで日付型以外のフィールドで日付の比較を行うメモ
MySQLで日付を扱う場合ってたいていカラムの型として datetime とか date を指定することが多いと思うのですが、
そうではなくて、諸々の理由から日付型のカラム以外に日付(らしき)データを格納して、それを日付として比較する場合のメモ(ややこしや)
こんな感じのテーブルがあるとします。
CREATE TABLE `foo`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`year` INTEGER,
`month` INTEGER,
`day` INTEGER,
`created_at` DATETIME NOT NULL,
)
# year, month, day にそれぞれ年,月,日が格納されるこの中のyear、month、day の組み合わせが、たとえば "2010/02/15"より前のデータだけを取得したい場合どうするか?
これ、単純に年は年、月は月で比較するととんでもなく大変です。
とりあえず CONCAT (CONCAT_WS) と DATE_FORMAT の組み合わせを使えばすっきり書けそうです。
SELECT CONCAT(year, month, day) FROM foo;
# => 201011SELECT CONCAT_WS("/", year, month, day) FROM foo;
# => 2010/1/1SELECT DATE_FORMAT(CONCAT_WS("/", year, month, day, "%Y/%m/%d")) FROM foo;
# => 2010/01/01で、"2010/02/15" より前のデータを引っ張ってくる書き方。
SELECT
*
FROM
foo
WHERE
DATE_FORMAT(CONCAT_WS("/", year, month, day, "%Y/%m/%d")) <= "2010/02/15";MySQLの日付時刻関数
http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html
MySQLの文字列関数数
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

