ゼロと無限の間に

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

ユーザ用ツール

サイト用ツール


python-box:appengine-oauth

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
python-box:appengine-oauth [2010/09/13 00:01] – サンプルにnorikae_map追加 dgbadminpython-box:appengine-oauth [2017/05/13 05:52] – [その4. TwitterにOAuthでログインしてTwitter APIを使うデモ] dgbadmin
行 26: 行 26:
 ==== その2. 地名を告げるとその近くにいるTwitterユーザーの名前を教えてくれるBot ==== ==== その2. 地名を告げるとその近くにいるTwitterユーザーの名前を教えてくれるBot ====
 [[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|ここをクリック]]
  
  
行 31: 行 35:
 [[http://twitter.com/norikae_map|@norikae_map]] [[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を使うデモ]] 
  
-ソースコード\\ 
-(※[[python-box/appengine-basehandler|AppEngine Basehandler]]と[[python-box/appengine-twitter|AppEngine Twitter]]を使っている) 
-<code python> 
 #!/usr/bin/env python #!/usr/bin/env python
 # -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
行 47: 行 57:
 ''' '''
  
 +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 
  
  
行 119: 行 128:
     # ここまで来れば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()
行 160: 行 169:
 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> +
- +
  
 ===== AppEngine-OAuthのソースコード ===== ===== AppEngine-OAuthのソースコード =====
行 180: 行 185:
  
 __author__ = 'dgbadmin@gmail.com' __author__ = 'dgbadmin@gmail.com'
-__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 = 'access'       self._token_type = 'access'
- +
  
   def prepare_login(self, req_token_url):   def prepare_login(self, req_token_url):
行 227: 行 232:
     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
  
行 235: 行 240:
     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')
行 258: 行 263:
     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 = ''
行 267: 行 272:
       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]
行 282: 行 287:
  
   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.txt · 最終更新: 2017/05/13 05:54 by dgbadmin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki