ゼロと無限の間に

フリーでオープンソースなJavaScriptとかPHPとか。

ユーザ用ツール

サイト用ツール


python-box:appengine-oauth

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
python-box:appengine-oauth [2010/09/05 23:50]
dgbadmin
python-box:appengine-oauth [2017/05/13 05:54] (現在)
dgbadmin [その4. TwitterにOAuthでログインしてTwitter APIを使うデモ]
行 27: 行 27:
 [[http://twitter.com/who_is_near|@who_is_near]] [[http://twitter.com/who_is_near|@who_is_near]]
  
 +=== 使用例 ===
 +<code>@who_is_near 六本木</code>
 +試しにつぶやくには、Twitterにログイン後に[[http://twitter.com/?status=%40who_is_near%20%E5%85%AD%E6%9C%AC%E6%9C%A8|ここをクリック]]
  
-==== その3. TwitterにOAuthでログインしてTwitter APIを使うデモ ====+ 
 +==== その3. 出発地点と目的地を告げると、乗換(ルート)案内のGoogleマップを表示してくれるBot ==== 
 +[[http://twitter.com/norikae_map|@norikae_map]] 
 + 
 +=== 使用例 1. 移動方法を指定しないと、電車でのルート検索・乗り換え案内になる === 
 +<code>@norikae_map 東京 大阪</code> 
 +試しにつぶやくには、Twitterにログイン後に[[http://twitter.com/?status=%40norikae_map%20%E6%9D%B1%E4%BA%AC%20%E5%A4%A7%E9%98%AA|ここをクリック]] 
 + 
 +=== 使用例 2. 車でのルートの案内 === 
 +<code>@norikae_map 木更津駅 羽田空港駅 車</code> 
 +試しにつぶやくには、Twitterにログイン後に[[http://twitter.com/?status=%40norikae_map%20%E6%9C%A8%E6%9B%B4%E6%B4%A5%E9%A7%85%20%E7%BE%BD%E7%94%B0%E7%A9%BA%E6%B8%AF%E9%A7%85%20%E8%BB%8A|ここをクリック]] 
 + 
 +=== 使用例 3. 歩きでのルートの案内 === 
 +<code>@norikae_map 霞が関 霞が関 歩き</code> 
 +試しにつぶやくには、Twitterにログイン後に[[http://twitter.com/?status=%40norikae_map%20%E9%9C%9E%E3%81%8C%E9%96%A2%20%E9%9C%9E%E3%81%8C%E9%96%A2%20%E6%AD%A9%E3%81%8D|ここをクリック]] 
 + 
 + 
 +==== その4. TwitterにOAuthでログインしてTwitter APIを使うデモ ====
 [[http://0-oo.appspot.com/oauth/|TwitterにOAuthでログインしてTwitter APIを使うデモ]] [[http://0-oo.appspot.com/oauth/|TwitterにOAuthでログインしてTwitter APIを使うデモ]]
  
行 43: 行 63:
 ''' '''
  
 +import json
 import logging import logging
-import wsgiref.handlers+import webapp2
 from appengine_twitter import AppEngineTwitter from appengine_twitter import AppEngineTwitter
 from basehandler import BaseHandler, h from basehandler import BaseHandler, h
-from django.utils import simplejson 
 from google.appengine.ext import db from google.appengine.ext import db
-from google.appengine.ext import webapp 
  
  
行 115: 行 134:
     # ここまで来ればOAuthを使ってAPIが使える。試しにユーザー名を取得     # ここまで来ればOAuthを使ってAPIが使える。試しにユーザー名を取得
     twitter.verify()     twitter.verify()
-    name = simplejson.loads(twitter.last_response.content)['screen_name']+    name = json.loads(twitter.last_response.content)['screen_name']
  
     self.demo_header()     self.demo_header()
行 156: 行 175:
 routing = [('/oauth/', InitHandler), routing = [('/oauth/', InitHandler),
            ('/oauth/callback', CallbackHandler)]            ('/oauth/callback', CallbackHandler)]
-application = webapp.WSGIApplication(routing, debug=False+application = webapp2.WSGIApplication(routing, debug=False)
-wsgiref.handlers.CGIHandler().run(application)+
 </code> </code>
  
行 176: 行 194:
  
 __author__ = 'dgbadmin@gmail.com' __author__ = 'dgbadmin@gmail.com'
-__version__ = '0.1.0'+__version__ = '0.1.1'
  
  
行 185: 行 203:
 from random import getrandbits from random import getrandbits
 from time import time from time import time
- +
  
 class AppEngineOAuth(object): class AppEngineOAuth(object):
行 200: 行 218:
     else:     else:
       self._token_type = 'access'       self._token_type = 'access'
- +
  
   def prepare_login(self, req_token_url):   def prepare_login(self, req_token_url):
行 223: 行 241:
     dic['params'] = urllib.urlencode(self.get_oauth_params(req_token_url,     dic['params'] = urllib.urlencode(self.get_oauth_params(req_token_url,
                                                            sig_params))                                                            sig_params))
-    +
     return dic     return dic
  
行 231: 行 249:
     self._token_secret = req_token_secret     self._token_secret = req_token_secret
     self._token_type = 'request'     self._token_type = 'request'
-    +
     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, payload=params, method='POST')     res = urlfetch.fetch(url=acs_token_url, payload=params, method='POST')
行 254: 行 272:
     if self._token_type != None:     if self._token_type != None:
       oauth_params['oauth_token'] = self._token       oauth_params['oauth_token'] = self._token
-      +
     # Add other params     # Add other params
     params.update(oauth_params)     params.update(oauth_params)
-    +
     # Sort and concat     # Sort and concat
     s = ''     s = ''
行 263: 行 281:
       s += self._quote(k) + '=' + self._quote(params[k]) + '&'       s += self._quote(k) + '=' + self._quote(params[k]) + '&'
     msg = method + '&' + self._quote(url) + '&' + self._quote(s[:-1])     msg = method + '&' + self._quote(url) + '&' + self._quote(s[:-1])
-    +
     # Maybe token_secret is empty     # Maybe token_secret is empty
     key = self._secret + '&' + self._token_secret     key = self._secret + '&' + self._token_secret
-    +
     digest = hmac.new(key, msg, sha1).digest()     digest = hmac.new(key, msg, sha1).digest()
     params['oauth_signature'] = digest.encode('base64')[:-1]     params['oauth_signature'] = digest.encode('base64')[:-1]
行 278: 行 296:
  
   def _qs2dict(self, s):   def _qs2dict(self, s):
-    dic = {}  +    dic = {}
     for param in s.split('&'):     for param in s.split('&'):
       (key, value) = param.split('=')       (key, value) = param.split('=')
python-box/appengine-oauth.1283698224.txt.gz · 最終更新: 2010/09/05 23:50 by dgbadmin