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 にそれぞれ年,月,日が格納される


この中のyearmonthday の組み合わせが、たとえば "2010/02/15"より前のデータだけを取得したい場合どうするか?



これ、単純に年は年、月は月で比較するととんでもなく大変です。




とりあえず CONCAT (CONCAT_WS)DATE_FORMAT の組み合わせを使えばすっきり書けそうです。

SELECT CONCAT(year, month, day) FROM foo;
# => 201011

SELECT CONCAT_WS("/", year, month, day) FROM foo;
# => 2010/1/1

SELECT 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

2010年1月23日土曜日

自分の知らない本やCDを手軽に発掘する方法

ちょっと大げさなタイトルですが全然たいしたことではないです。


ようするに

amazonのリストマニアってけっこう参考になるよね


ってことです。


amazonっていうと「この商品を買った人はこんな商品も買っています」みたいな自動レコメンデーション機能がわりとフィーチャーされるのですが、
あれって、発売日が近いものしか並ばないんですよね。

なので、新作をどんどん買いたいっていう人には使える機能なのですが
自分の知らない旧作を発掘したいなあっていう時にはあまり役に立ちません。


そんな時に参考になるのが同じamazonのリストマニア


本だったら 「**の名著20冊」
CDだったら 「**の名盤15枚」

みたいなリストがいろいろ見つかります。



例えば、マイルス・デイヴィスの『Kind of Blue』を聴いて感動した時
その『King of Blue』を含むリストマニアを検索すると面白そうなリストがいろいろ見つかります。
モダン・ジャズトランペット渾身の10枚” などなど


リストの中から興味を持ったアイテムをピックアップしていけば自分の知らない本やCDをどんどん発掘できるという寸法です。


特に、自分が不慣れな分野の本やCDを発掘したい時に参考になるかと。



もちろんWebで検索したりSNSのコミュニティを参考にしたりってのもあるのですが
リストマニアのようにごそっとリスト形式でまとめてあるサイトっていうのは個人的に使いやすいので紹介してみました。
(今更っていう感じではありますが)

2010年1月11日月曜日

Google Chromeで「日本語のページを検索」ではなく「ウェブ全体から検索」する方法

Mac版のGoogle Chromeがやっと拡張機能に対応したので家のMacBookでもわりとChromeを使っています。

ChromeはロケーションバーがURLの指定とともに検索の窓にもなっているのですが、ここでちょっと気になることがあったのでメモしておきます。
(おそらくMac版限定の話)


ロケーションバーにキーワードを入力してenterキーを押すと、デフォルトではGoogleでキーワード検索をすることができます。

ええ、検索エンジンはGoogleで問題ありません。

ですが、オプションが日本語のページを検索となってしまっています。

人によっては違うのでしょうが、

自分の場合ここはウェブ全体から検索したいところです。




以下、「ウェブ全体から検索」を設定する方法
(設定しないとGoogleのページで「ウェブ全体から検索」にチェックを入れても検索するたびに「日本語のページを検索」になってしまいます)


1. 準備

まずはhttp://www.google.co.jpを開き、ウェブ全体から検索にチェックが入っていることを確認して、適当なキーワードで検索してください。


テレビ で検索した例

http://www.google.co.jp/search?hl=ja&source=hp&q=テレビ&btnG=Google+検索&lr=&aq=f&oq=

このURLのテレビ の部分を %s に置き換えます

http://www.google.co.jp/search?hl=ja&source=hp&q=%s&btnG=Google+検索&lr=&aq=f&oq=




2, 設定する

Chrome » 環境設定 を開いてください。

規定の検索エンジン の「管理」ボタンをクリックしてください。


開いたウィンドウの「」ボタンをクリックしたください。

名前: Google
キーワード: google.co.jp
URL: (さきほど準備したURLをコピーしてください)

入力し終わったら「OK」ボタンをクリック


最後に、今追加した項目を選択して「既定にする」をクリック


以上で終了です。

ロケーションバーで検索するとウェブ全体から検索していることが確認できるはずです。

読者