python-box:appengine-oauth
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン | ||
python-box:appengine-oauth [2010/09/13 00:01] – サンプルにnorikae_map追加 dgbadmin | python-box:appengine-oauth [2017/05/13 05:52] – [その4. TwitterにOAuthでログインしてTwitter APIを使うデモ] dgbadmin | ||
---|---|---|---|
行 26: | 行 26: | ||
==== その2. 地名を告げるとその近くにいるTwitterユーザーの名前を教えてくれるBot ==== | ==== その2. 地名を告げるとその近くにいるTwitterユーザーの名前を教えてくれるBot ==== | ||
[[http:// | [[http:// | ||
+ | |||
+ | === 使用例 === | ||
+ | < | ||
+ | 試しにつぶやくには、Twitterにログイン後に[[http:// | ||
行 31: | 行 35: | ||
[[http:// | [[http:// | ||
+ | === 使用例 1. 移動方法を指定しないと、電車でのルート検索・乗り換え案内になる === | ||
+ | < | ||
+ | 試しにつぶやくには、Twitterにログイン後に[[http:// | ||
+ | |||
+ | === 使用例 2. 車でのルートの案内 === | ||
+ | < | ||
+ | 試しにつぶやくには、Twitterにログイン後に[[http:// | ||
+ | |||
+ | === 使用例 3. 歩きでのルートの案内 === | ||
+ | < | ||
+ | 試しにつぶやくには、Twitterにログイン後に[[http:// | ||
- | ==== その4. TwitterにOAuthでログインしてTwitter APIを使うデモ ==== | ||
- | [[http:// | ||
- | ソースコード\\ | ||
- | (※[[python-box/ | ||
- | <code python> | ||
# | # | ||
# -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- | ||
行 47: | 行 57: | ||
''' | ''' | ||
+ | import json | ||
import logging | import logging | ||
- | import | + | import |
from appengine_twitter import AppEngineTwitter | from appengine_twitter import AppEngineTwitter | ||
from basehandler import BaseHandler, | from basehandler import BaseHandler, | ||
- | from django.utils import simplejson | ||
from google.appengine.ext import db | from google.appengine.ext import db | ||
- | from google.appengine.ext import webapp | ||
行 119: | 行 128: | ||
# ここまで来ればOAuthを使ってAPIが使える。試しにユーザー名を取得 | # ここまで来ればOAuthを使ってAPIが使える。試しにユーザー名を取得 | ||
twitter.verify() | twitter.verify() | ||
- | name = simplejson.loads(twitter.last_response.content)[' | + | name = json.loads(twitter.last_response.content)[' |
self.demo_header() | self.demo_header() | ||
行 160: | 行 169: | ||
routing = [('/ | routing = [('/ | ||
| | ||
- | application = webapp.WSGIApplication(routing, | + | application = webapp2.WSGIApplication(routing, |
- | wsgiref.handlers.CGIHandler().run(application) | + | |
- | </ | + | |
- | + | ||
===== AppEngine-OAuthのソースコード ===== | ===== AppEngine-OAuthのソースコード ===== | ||
行 180: | 行 185: | ||
__author__ = ' | __author__ = ' | ||
- | __version__ = '0.1.0' | + | __version__ = '0.1.1' |
行 189: | 行 194: | ||
from random import getrandbits | from random import getrandbits | ||
from time import time | from time import time | ||
- | + | ||
class AppEngineOAuth(object): | class AppEngineOAuth(object): | ||
行 204: | 行 209: | ||
else: | else: | ||
self._token_type = ' | self._token_type = ' | ||
- | + | ||
def prepare_login(self, | def prepare_login(self, | ||
行 227: | 行 232: | ||
dic[' | dic[' | ||
| | ||
- | | + | |
return dic | return dic | ||
行 235: | 行 240: | ||
self._token_secret = req_token_secret | self._token_secret = req_token_secret | ||
self._token_type = ' | self._token_type = ' | ||
- | | + | |
params = urllib.urlencode(self.get_oauth_params(acs_token_url, | params = urllib.urlencode(self.get_oauth_params(acs_token_url, | ||
res = urlfetch.fetch(url=acs_token_url, | res = urlfetch.fetch(url=acs_token_url, | ||
行 258: | 行 263: | ||
if self._token_type != None: | if self._token_type != None: | ||
oauth_params[' | oauth_params[' | ||
- | | + | |
# Add other params | # Add other params | ||
params.update(oauth_params) | params.update(oauth_params) | ||
- | | + | |
# Sort and concat | # Sort and concat | ||
s = '' | s = '' | ||
行 267: | 行 272: | ||
s += self._quote(k) + ' | s += self._quote(k) + ' | ||
msg = method + '&' | msg = method + '&' | ||
- | | + | |
# Maybe token_secret is empty | # Maybe token_secret is empty | ||
key = self._secret + '&' | key = self._secret + '&' | ||
- | | + | |
digest = hmac.new(key, | digest = hmac.new(key, | ||
params[' | params[' | ||
行 282: | 行 287: | ||
def _qs2dict(self, | def _qs2dict(self, | ||
- | dic = {} | + | dic = {} |
for param in s.split('&' | for param in s.split('&' | ||
(key, value) = param.split(' | (key, value) = param.split(' |
python-box/appengine-oauth.txt · 最終更新: 2017/05/13 05:54 by dgbadmin