ゼロと無限の間に

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

ユーザ用ツール

サイト用ツール


python-box:appengine-oauth

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン 両方とも次のリビジョン
python-box:appengine-oauth [2010/11/02 01:27]
dgbadmin @norikae_mapの使用例に車・歩きを追加
python-box:appengine-oauth [2017/05/13 05:52]
dgbadmin [その4. TwitterにOAuthでログインしてTwitter APIを使うデモ]
行 44: 行 44:
  
 === 使用例 3. 歩きでのルートの案内 === === 使用例 3. 歩きでのルートの案内 ===
-<code>@norikae_map 八里郷領港大道 福州平潭県 歩き</code> +<code>@norikae_map 霞が関 霞が関 歩き</code> 
-試しにつぶやくには、Twitterにログイン後に[[http://twitter.com/?status=%40norikae_map%20%E5%85%AB%E9%87%8C%E9%83%B7%E9%A0%98%E6%B8%AF%E5%A4%A7%E9%81%93%20%E7%A6%8F%E5%B7%9E%E5%B9%B3%E6%BD%AD%E7%9C%8C%20%E6%AD%A9%E3%81%8D|ここをクリック]]+試しにつぶやくには、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 -*-
行 63: 行 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 
  
  
行 135: 行 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()
行 176: 行 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のソースコード =====
行 196: 行 185:
  
 __author__ = 'dgbadmin@gmail.com' __author__ = 'dgbadmin@gmail.com'
-__version__ = '0.1.0'+__version__ = '0.1.1'
  
  
行 205: 行 194:
 from random import getrandbits from random import getrandbits
 from time import time from time import time
- +
  
 class AppEngineOAuth(object): class AppEngineOAuth(object):
行 220: 行 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):
行 243: 行 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
  
行 251: 行 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')
行 274: 行 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 = ''
行 283: 行 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]
行 298: 行 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