def __init__(self, app_key, app_secret, call_back): ''' 初始化相关数据 ''' # 新浪api认证 self.client = APIClient(app_key=app_key, app_secret=app_secret, redirect_uri=call_back) auth_url = self.client.get_authorize_url() webbrowser.open(auth_url) code = raw_input('Please input the code: ').strip() r = self.client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in self.client.set_access_token(access_token, expires_in) print 'INFO\t:Login success!' # MongoDB 数据库连接 self.connection = Connection() self.db = self.connection.weibo self.user_collection = self.db.user_info self.friend_collection = self.db.user_friend self.follower_collection = self.db.user_follower print 'INFO\t:Connect to MongoDB success!'
def get(self, request): # 得到回传的 code code = request.GET.get('code') oauth_sina = APIClient(app_key=settings.SINA_APP_KEY, app_secret=settings.SINA_APP_SECRET, redirect_uri=settings.SINA_REDIRECT_URI) try: # 根据 code 得到 tocken => {'access_token': '2.00IsO_OGJcPibD120f9a82d9R4xf1C', 'uid': '5708251100', 'expires_in': 1563044399, 'expires': 1563044399} tocken = oauth_sina.request_access_token(code=code) except Exception as e: logger.error(e) return http.HttpResponseServerError('Oauth2.0认证失败!') # 获取 uid uid = tocken.get('uid') # 判断 uid 是否绑定用户 try: sina_user = OAuthSinaUser.objects.get(uid=uid) except Exception as e: # 查询失败说明未绑定,跳转到绑定页面 # 将 uid 加密 secret_uid = SecretOauth().dumps({'uid': uid}) context = {'uid': secret_uid} return render(request, 'sina_callback.html', context) else: # 用户已绑定,则记录用户登陆状态 user = sina_user.user login(request, user) # 跳转到首页 response = redirect(reverse('contents:index')) # 设置 cookie response.set_cookie('username', user.username, max_age=3600 * 24 * 14) return response
class WeiboAPIService(object): def __init__(self,appKey="1268278335",appSecret = "204dfdc6e50ea33fe282445f4f0a3b0e",token = "2.005jCfXFLIZp4Bd42d17a3dbC3fmaB"): self.appKey = appKey self.appSecret = appSecret self.token = token self.client = APIClient(self.appKey,self.appSecret, redirect_uri='') self.client.set_access_token(self.token,0) # 获取用户信息 # 接口详情参考:http://open.weibo.com/wiki/2/users/show def getUserInfo(self,screen_name=None,uid=None): if screen_name is not None: data = self.client.users.show.get(screen_name = screen_name) elif uid is not None: data = self.client.users.show.get(uid = uid) else: raise Exception() return data # 获取某个位置周边的动态 # 接口详情参考:http://open.weibo.com/wiki/2/place/nearby_timeline def getWeibo_nearbyline(self,lat,lon,starttime,endtime,range=3000,count=50,offset=0): data = self.client.place.nearby_timeline.get(lat=lat,long=lon,starttime=starttime,endtime=endtime,range=range,count=count,offset=offset) return data def get_weibo_user_timeline(self, uid, count=50): return self.client.place.user_timeline.get(uid=uid, count=count) def get_poi_timeline(self, poiid, count=50, page=1): return self.client.place.poi_timeline.get(poiid=poiid, count=count, page=page) def get_address_to_geo(self, address): return self.client.location.geo.address_to_geo.get(address=address)
def access_client(): client = APIClient(app_key='APP_KEY', app_secret='APP_SECRET', redirect_uri='CALLBACK_URL') client.set_access_token( 'XXXXX', '12') ##填入获得token,形式为2.00Hk5I5B3mz1gEda51bd5caewXXXYY return client
class Send_Weibo(): def __init__(self): self.filename = os.path.join(CUR_DIR, 'token.json') self._set_client() def _set_client(self): self.cfg = AuthConfig() self.client = APIClient(app_key=self.cfg.app_key, app_secret=self.cfg.app_secret, redirect_uri=self.cfg.callback_url) def set_token(self): jsonfile = file(self.filename, 'r') token = json.load(jsonfile) self.client.set_access_token(token['access_token'], token['expires_in']) def send_weibo(self, text): self.set_token() if not isinstance(text, unicode): text = text.encode('utf-8') self.client.statuses.update.post(status=text) def send_pic_weibo(self, text, photo): self.set_token() pic = file(photo, 'rb') if not isinstance(text, unicode): text = text.encode('utf-8') self.client.statuses.upload.post(status=text, pic=pic)
def get_user_info(self,code): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in print r.access_token,r.expires_in client.set_access_token(access_token, expires_in) uid = client.get.account__get_uid().uid print uid user = User.verify_user_openID(accountType=User.USER_TYPE_SINA_WEIBO,\ accountID=uid) if not user: user_info = client.get.users__show(uid=uid) user = User.new(username="******" % (User.USER_TYPE_SINA_WEIBO,uid),\ accountType=User.USER_TYPE_SINA_WEIBO,accountID=uid) user.screen_name = user_info.screen_name user.gender = user_info.gender user.headPortrait_url = user_info.profile_image_url #avatar_large? print user_info user.openIDinfo = user_info else: print "old user" if user.last_login == None: user.bonus_notification = 1 else: last_login_date = datetime.fromtimestamp(user.last_login) if last_login_date.date() < datetime.today().date(): user.bonus_notification = 1 user.last_login = int(time.time()) self.got_user_info(uid,user)
def GetCode(userid, passwd): """获取用户code""" print 'Get the code...', client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) referer_url = client.get_authorize_url() postdata = { "action": "login", "client_id": APP_KEY, "redirect_uri": CALLBACK_URL, "userId": userid, "passwd": passwd, } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0", "Referer": referer_url, "Connection": "keep-alive" } req = urllib2.Request(url=AUTH_URL, data=urllib.urlencode(postdata), headers=headers) resp = urllib2.urlopen(req) print 'success!!!' return resp.geturl()[-32:]
def weibo_login(request): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) auth_url = client.get_authorize_url() return HttpResponseRedirect(auth_url)
def weibo_login_check(request): code = request.GET.get('code', None) back_to_url = _get_referer_url(request) client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in request.session['oauth_access_token'] = r client.set_access_token(access_token, expires_in) uid = client.account.get_uid.get() data = client.users.show.get(uid=uid['uid']) user = { 'weibo_id': data['id'], 'name': data['screen_name'], 'description': data['description'], 'avatar': data['avatar_large'], 'created_at': datetime.datetime.now().strftime('%y年%m月%d日 %H:%M:%S'), } #check the database user_ins = profile_manager() user_ins.check_or_save(user) request.session['user'] = user return HttpResponseRedirect(back_to_url)
class Weibo: def __init__(self): self.client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) self.conn = httplib.HTTPSConnection('api.weibo.com') def auth(self, username, password): postdata = urllib.urlencode({'client_id':APP_KEY,'response_type':'code','redirect_uri':CALLBACK_URL,'action':'submit',\ 'userId':username,'passwd':password,'isLoginSina':0,'withOfficalFlag':0}) self.conn.request('POST','/oauth2/authorize',postdata,{'Referer':self.client.get_authorize_url(),\ 'Content-Type':'application/x-www-form-urlencoded'}) location = self.conn.getresponse().getheader('location') self.conn.close() if location: r = self.client.request_access_token(location.split('=')[1]) return (r.access_token, r.expires_in) else: return None def setToken(self, access_token, expires_in): self.client.set_access_token(access_token, expires_in) def post(self, text, image): return self.client.statuses.upload.post(status=text, pic=urllib.urlopen(image)) def profile(self): u = self.client.get.statuses__user_timeline().statuses[0].user return(u.screen_name, u.avatar_large) def getComment(self, mid): return self.client.comments.show.get(id=int(mid)) def addComment(self, newcomment, mid): return self.client.comments.create.post(comment=newcomment, id=int(mid))
def begin(): APP_KEY = 'xxxxxxxx' # app key APP_SECRET = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # app secret CALLBACK_URL = 'https://api.weibo.com/oauth2/default.html' # callback url client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) code = get_code() r = client.request_access_token(code) print r access_token = r.access_token # 新浪返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间 client.set_access_token(access_token, expires_in) #发普通微博 client.statuses.update.post(status=u'test') #发图片微博 f = open('C:/pic/test.jpg', 'rb') r = client.statuses.upload.post(status=u'测试OAuth 2.0带图片发微博', pic=f) f.close() # APIClient不会自动关闭文件,需要手动关闭 begin()
def get_local_weibo_client(): all_tokens = None if 'token.json' not in os.listdir('.'): print 'no token.json file' return None else: f = file('token.json', 'r') all_tokens = json.load(f) f.close() if not all_tokens: return None token = all_tokens.pop(0) APP_KEY = token['APP_KEY'] APP_SECRET = token['APP_SECRET'] CALLBACK_URL = token['CALLBACK_URL'] client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) access_token = token['token'] expires_in = token['expires'] client.set_access_token(access_token, expires_in) return client
def post_weibo(access_token, expires_in, text, pic=None): auth_client = APIClient(APP_KEY, APP_SECRET, CALLBACK_URL) auth_client.set_access_token(access_token, expires_in) if pic == None: auth_client.statuses.update.post(status=text) else: auth_client.statuses.upload.post(status=text, pic=pic)
def event_func(): APP_KEY='2218208544' APP_SECRET='956ae245a2f62a11a9eca1d91fbda092' CALLBACK_URL='http://cdgir.cumt.edu.cn/ShowCode.aspx' client=APIClient(app_key=APP_KEY,app_secret=APP_SECRET,\ redirect_uri=CALLBACK_URL) url=client.get_authorize_url() print url webbrowser.open(url) code=raw_input("input the code:").strip() print code r=client.request_access_token(code); access_token=r.access_token expires_in=r.expires_in client.set_access_token(access_token,expires_in) val=client.place.pois.show.get(poiid='B2094757D06FA3FD4499') text="%s\t%s\t%s\t%s\r\n" % (val.title,val.lon,val.lat,val.address) #print poi_result.total_number #for val in poi_result: #for k, v in val.items(): #print ("%s : %s" % (k,v))这个是val这个dic的循环遍历 #text+="%s\t%s\t%s\t%s\r\n" % (val.title,val.lon,val.lat,val.address)#可参考api的json返回示例 print text #print text.encode('utf-8') open('log.txt','a').write(text.encode('utf-8'))
def Weibo(USERID, PASSWD): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) referer_url = client.get_authorize_url() #print "referer url is : %s" % referer_url cookies = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(cookies) urllib2.install_opener(opener) postdata = {"client_id": APP_KEY, "redirect_uri": CALLBACK_URL, "userId": USERID, "passwd": PASSWD, "isLoginSina": "0", "action": "submit", "response_type": "code", } headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0", "Host": "api.weibo.com", "Referer": referer_url } req = urllib2.Request(url = AUTH_URL, data = urllib.urlencode(postdata), headers = headers ) try: resp = urllib2.urlopen(req) #print "callback url is : %s" % resp.geturl() code = resp.geturl()[-32:] except APIError, e: print e
def weiboLogin(request): """微博登录""" client = APIClient(app_key=settings.APP_KEY, app_secret=settings.APP_SERCET, redirect_uri=settings.CALLBACK_URL) url = client.get_authorize_url() return HttpResponseRedirect(url)
def upload_pic(code): #print "codecodecodecode" #print code app_key = '2375582409' app_secret = '30efe65a663641a1c5b75f1f32063892' callback_url = 'https://api.weibo.com/oauth2/default.html' client = APIClient(app_key=app_key, app_secret=app_secret, redirect_uri=callback_url) #code = raw_input("Input code:") r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in client.set_access_token(access_token, expires_in) idx = 1 default_msg_part_1 = 'This is no.' default_msg_part_2 = ' msg sent automatically from benny"s robot HAHAHA' # send a weibo with img f = open('test.jpg', 'rb') #r = client.statuses.share.post(status=u'test: weibo with an img. -benny') r = client.statuses.share.post(access_token=access_token, status=u'测试 http://www.weibo.com/', pic=f) f.close() # APIClient不会自动关闭文件,需要手动关闭
class Weibo(object): def __init__(self): self.APP_KEY = current_app.config['WEIBO_APP_KEY'] self.APP_SECRET = current_app.config['WEIBO_APP_SECRET'] self.CALLBACK_URL = current_app.config['WEIBO_CALLBACK_URL'] self.ACCESS_TOKEN = current_app.config['WEIBO_ACCESS_TOKEN'] self.EXPIRES_TIME = current_app.config['WEIBO_EXPIRES_TIME'] self.client = APIClient( app_key=self.APP_KEY, app_secret=self.APP_SECRET, redirect_uri=self.CALLBACK_URL) self.client.set_access_token(self.ACCESS_TOKEN, self.EXPIRES_TIME) def post_weibo(self, **kw): current_app.logger.info('_post_weibo') try: body = kw.get('body') url = kw.get('url') nickname = u' 团长: ' + kw.get('nickname') topic = u'#海淘拼单#' r = self.client.statuses.share.post( status=body + nickname + topic + url) return r except Exception as e: current_app.logger.exception('_post_weibo') sendException(e, 'Weibo post_weibo') return None
def create_user_from_weibo(request, template_name='register/create_user_from_weibo.html' ): oauth_access_token = request.session.get('oauth_access_token', None) if request.user.is_authenticated() or oauth_access_token is None: return HttpResponseRedirect(reverse('home.views.index')) client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=_get_weibo_callback_url(request)) client.set_access_token(oauth_access_token['access_token'], oauth_access_token['expires_in']) weibo_user = client.get.users__show(uid=oauth_access_token['uid']) weibo_username = weibo_user.screen_name template_var = {} form = RegistrationForm(initial={'username': weibo_username}) if request.method == 'POST': form = RegistrationForm(request.POST.copy()) if request.method == 'POST': if form.is_valid(): username = form.cleaned_data['username'] email = form.cleaned_data['email'] password = form.cleaned_data['password'] user = User.objects.create_user(username, email, password) user.is_active = True user.save() profile = UserProfile() profile.user = user profile.song_ord_filed = 'post_datetime' profile.save() #weibo信息记录 w_user = WeiboUser() w_user.user = user w_user.weibo_user_id = oauth_access_token['uid'] w_user.weibo_username = weibo_username w_user.oauth_access_token = oauth_access_token['access_token'] w_user.save() #发微博提示 if request.POST.get('update_msg'): msg = request.POST.get('bind_msg')[0:140] client.post.statuses__update(status=msg) user = authenticate(username=username, password=password) auth_login(request, user) return HttpResponseRedirect(reverse('songs.views.my_home')) template_var['form'] = form template_var['weibo_username'] = weibo_username return render_to_response(template_name, template_var, context_instance=RequestContext(request))
def request_access_token(code, oauth, redirect_uri=None): ''' return access token as object: {"access_token":"your-access-token","expires_in":12345678,"uid":1234}, expires_in is standard unix-epoch-time ''' client = APIClient(apitype='oauth2', format=None) redirect = redirect_uri if redirect_uri else oauth.app_callback if not redirect: raise APIError('21305', 'Parameter absent: redirect_uri', 'OAuth2 request') r = client.access_token( client_id=oauth.app_key, client_secret=oauth.app_secret, redirect_uri=redirect, code=code, grant_type='authorization_code', _method='POST' ) current = int(time.time()) expires = r.expires_in + current remind_in = r.get('remind_in', None) if remind_in: rtime = int(remind_in) + current if rtime < expires: expires = rtime jo = JsonObject(access_token=r.access_token, expires_in=expires) uid = r.get('uid', None) if uid: jo.uid = uid return jo
def GetCode(userid, passwd): """获取用户code""" print 'Get the code...', client = APIClient(app_key = APP_KEY, app_secret = APP_SECRET, redirect_uri = CALLBACK_URL) referer_url = client.get_authorize_url() postdata = { "action": "login", "client_id": APP_KEY, "redirect_uri":CALLBACK_URL, "userId": userid, "passwd": passwd, } headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0", "Referer":referer_url, "Connection":"keep-alive" } req = urllib2.Request( url = AUTH_URL, data = urllib.urlencode(postdata), headers = headers ) resp = urllib2.urlopen(req) print 'success!!!' return resp.geturl()[-32:]
def weibo_auth(request): # 获取URL参数code: code = request.GET.get('code') client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=_get_weibo_callback_url(request)) token_obj = client.request_access_token(code) client.set_access_token(token_obj.access_token, token_obj.expires_in) if request.session.has_key('oauth_access_token'): del request.session['oauth_access_token'] request.session['oauth_access_token'] = { 'uid' : token_obj.uid, 'access_token' : token_obj.access_token, 'expires_in' : token_obj.expires_in} oauth_access_token = request.session.get('oauth_access_token', None) back_to_url = reverse('songs.views.my_home') if token_obj is not None: try: w_user = WeiboUser.objects.get(weibo_user_id=oauth_access_token['uid']) user = authenticate(weibo_user=w_user) if user and user.is_active: auth_login(request,user) except WeiboUser.DoesNotExist: back_to_url = reverse('social.views.create_user_from_weibo') return HttpResponseRedirect(back_to_url)
def get_code(): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() #print "referer url is : %s" % url cookies = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(cookies) urllib2.install_opener(opener) postdata = { "client_id": APP_KEY, "redirect_uri": CALLBACK_URL, "userId": USERID, "passwd": PASSWD, "isLoginSina": "0", "action": "submit", "response_type": "code" } headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0", "Host": "api.weibo.com", "Referer": url } req = urllib2.Request(url=url, data=urllib.urlencode(postdata), headers=headers) resp = urllib2.urlopen(req) #print "callback url is : %s" % resp.geturl() #print "code is : %s" % resp.geturl()[-32:] code = resp.geturl()[-32:] return code
def callback(): code = request.args.get('code') if code is not None: client = APIClient( app_key = current_app.config['APP_KEY'], app_secret = current_app.config['APP_SECRET'], redirect_uri = current_app.config['CALLBACK_URL']) r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in uid = r.uid client.set_access_token(access_token, expires_in) session['access_token'] = access_token user = User.query.filter_by(uuid = uid).first() if user is not None: login_user(user) return redirect(url_for('main.index')) else: u = client.users.show.get(uid = uid) user = User( uuid = uid, name = u.get('screen_name'), location = u.get('location'), description = u.get('description'), avatar = u.get('profile_image_url'), url = u.get('domain'), gender = u.get('gender') ) db.session.add(user) login_user(user) return redirect(url_for('main.index')) else: return redirect(url_for('main.index'))
def callback(request): code = request.GET.get('code') client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) r = client.request_access_token(code) request.session['token'] = r.access_token request.session['expire'] = r.expires_in return HttpResponseRedirect('/')
def get(self): # OAth2 for douban KEY = conf['douban_app_key'] SECRET = conf['douban_app_secret'] CALLBACK = conf['url'] + '/dback' SCOPE = 'douban_basic_common,community_basic_user,community_basic_note' client = DoubanClient(KEY, SECRET, CALLBACK, SCOPE) douban_login = client.authorize_url # OAth2 for sina_weibo APP_KEY = conf['weibo_app_key'] APP_SECRET = conf['weibo_app_secret'] CALLBACK_URL = conf['url'] + '/wback' weibo_client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) weibo_login = weibo_client.get_authorize_url() # statistics diary_count = Diary.get_diary_count() last_diary = Diary.get_last_diary() first_diary = Diary.get_first_diary() comment_count = Comment.get_comment_count() usr = tornado.escape.xhtml_escape(self.current_user) site_start = Admin.find_by_username(usr).get('site_start') self.render('Admin/dashboard.html', douban_login=douban_login, diary_count=diary_count, last_diary=last_diary, first_diary=first_diary, site_start=site_start, comment_count=comment_count, weibo_login=weibo_login )
def weibo_check(request): code = request.GET.get('code', None) now = datetime.datetime.now() if code: client = APIClient(app_key=settings.WEIBO_APP_KEY, app_secret=settings.WEIBO_APP_SERCET, redirect_uri=settings.WEIBO_CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token # 返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 uid = r.uid # 在此可保存access token client.set_access_token(access_token, expires_in) request.session['access_token'] = access_token request.session['expires_in'] = expires_in request.session['uid'] = uid # http://open.weibo.com/wiki/2/users/show data=client.user.show.get(uid) user=User(username=uid) user.save() name=data.get('name') return HttpResponseRedirect('/verification/index/?username='******''' # 更新数据库 if MyUser.objects.filter(uid=uid).exists(): MyUser.objects.filter(uid=uid).update(last_login=now) user.Login() # 登陆 return HttpResponseRedirect('/')#返回主页 else: # 创建用户并登陆 u_id = user.createUser() if u_id: return HttpResponseRedirect('/manage/user/%s/' %u_id) ''' return HttpResponse('/404/') #未获得新浪微博返回的CODE
def access_client(self,app_index): #定义供替换的APP Key和Secret APP_KEYS_SECRETS=config.APP_KEYS_SECRETS ##随机取出一个app index #current_index = int(random.random()*100 % len(APP_KEYS_SECRETS)) APP_KEY= APP_KEYS_SECRETS[app_index][0] #app key APP_SECRET = APP_KEYS_SECRETS[app_index][1] # app secret CALLBACK_URL = config.CALLBACK_URI # callback url username=config.ACCOUNT1 password=config.PASSWORD1 client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() conn = httplib.HTTPSConnection('api.weibo.com') postdata = urllib.urlencode({'client_id':APP_KEY,'response_type':'code','redirect_uri':CALLBACK_URL,'action':'submit','userId':username,'passwd':password,'isLoginSina':0,'from':'','regCallback':'','state':'','ticket':'','withOfficalFlag':0}) conn.request('POST','/oauth2/authorize',postdata,{'Referer':url, 'Content-Type': 'application/x-www-form-urlencoded'}) res = conn.getresponse() page = res.read() conn.close()##拿新浪给的code code = urlparse.parse_qs(urlparse.urlparse(res.msg['location']).query)['code'][0] token = client.request_access_token(code) access_token = token.access_token # 新浪返回的token,类似abc123xyz456 expires_in = token.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 # TODO: 在此可保存access token client.set_access_token(access_token, expires_in)##生成token return client
def accessToken_get(self): APP_KEY = '1690375172' APP_SECRET = 'e09cff8b33bd34426831fbf63caf00ca' CALLBACK_URL = 'http://weibo.com/itgeeks' ACCOUNT = '*****@*****.**' PASSWORD = '******' #for getting the authorize url client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() print url conn = httplib.HTTPSConnection('api.weibo.com') postdata = urllib.urlencode({'client_id':APP_KEY,'response_type':'code','redirect_uri':CALLBACK_URL,'action':'submit','userId':ACCOUNT, 'passwd':PASSWORD,'isLoginSina':0,'from':'','regCallback':'','state':'','ticket':'','withOfficalFlag':0}) conn.request('POST','/oauth2/authorize',postdata,{'Referer':url,'Content-Type': 'application/x-www-form-urlencoded'}) res = conn.getresponse() print 'headers===========',res.getheaders() print 'msg===========',res.msg print 'status===========',res.status print 'reason===========',res.reason print 'version===========',res.version location = res.getheader('location') print location code = location.split('=')[1] conn.close() r = client.request_access_token(code) access_token = r.access_token # The token return by sina expires_in = r.expires_in print "access_token=" ,access_token, "expires_in=" ,expires_in #save the access token client.set_access_token(access_token, expires_in) return client
def weibo_position_search_data(self): client = APIClient(app_key=oauth_para['weibo']['appid'], app_secret=oauth_para['weibo']['secret'], redirect_uri=oauth_para['weibo']['redirect_url']) client.set_access_token( self.__weibo_access_token, self.__weibo_expires ) ruid = client.get.account__get_uid() address = request.params.get('address') #return address position = client.get.location__geo__address_to_geo( address = address ) ruid = client.get.account__get_uid() userinfo = client.get.users__show( access_token =self.__weibo_access_token, uid = ruid.uid ) lats = str(position.geos[0]['latitude']) lngs = str(position.geos[0]['longitude']) lat = string.atof( lats ) lng = string.atof( lngs ) place_photos = client.get.place__nearby__photos( access_token =self.__weibo_access_token, lat = lat, long = lng, range = 500, count = 50 ) if 'statuses' in place_photos: data = json.dumps( place_photos.statuses) return {'data': data, 'username':userinfo.screen_name} else: return {'error_info': 'input_error', 'username':userinfo.screen_name}
def main(): client = APIClient( app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=C_URL) client.set_access_token(ACCESS_TOKEN, EXPIRES_IN) base_dir = os.path.split(os.path.realpath(__file__))[0] f = open(os.path.join(base_dir, 'tang300.v4.json'), 'r') ps = json.load(f) f.close() try: logfilename = os.path.join(base_dir, 'log.txt') logfile = open(logfilename, 'r') idx = int(logfile.read()) logfile.close() except: idx = 0 p = ps[idx] q = urllib.quote_plus(p[1].encode('utf8')) s = u'《%s》%s %s https://www.google.com.hk/#q=%s' % (p[1], p[2], p[0], q) s = urllib.quote_plus(s.encode('utf8')) img = os.path.join(base_dir, 'poem_png/%03d.png' % idx) client.statuses.upload.post( status=s, pic=open(img, 'rb')) idx = (idx+1) % len(ps) logfile = open(logfilename, 'w') logfile.write(str(idx)) logfile.close()
def getAccessToken(): client = APIClient(app_key=_LocalVar.APP_KEY, app_secret=_LocalVar.APP_SECRET, redirect_uri=_LocalVar.CALLBACK_URL) referer_url = client.get_authorize_url() postdata = { "action": "login", "client_id": _LocalVar.APP_KEY, "redirect_uri":_LocalVar.CALLBACK_URL, "userId": _LocalVar.name, "passwd": _LocalVar.password, } headers = { "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", "Referer":referer_url, "Connection":"keep-alive" } req = urllib2.Request( url = _LocalVar.AUTH_URL, data = urllib.urlencode(postdata), headers = headers ) print referer_url resp = urllib2.urlopen(req) code = resp.geturl()[-32:] r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in # urllib2.urlopen('http://weibo.com/u/2490013033').read().decode('gbk') return access_token
def GET(self): try: ins=web.input() # 获取URL参数code: code = ins.get('code') client = APIClient(app_key=CONSUME_KEY, app_secret=CONSUME_SECRET,redirect_uri=web.ctx.get('homedomain')+'/callback') r = client.request_access_token(code) access_token = r.access_token # 新浪返回的token,类似abc123xyz456 #return str(access_token ) expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 # TODO: 在此可保存access token client.set_access_token(access_token, expires_in) #oauth_verifier=ins.get('oauth_verifier',None) #request_token=session.get('request_token',None) #auth=OAuthHandler(CONSUME_KEY, CONSUME_SECRET) #auth.request_token=request_token #通过oauth_verifier来获取access_token #access_token=auth.get_access_token(oauth_verifier) session.access_token=access_token session.code = code session.expires_in = expires_in #return str(access_token) print '111111111111111111111' #user = client.get.users_show() #id = client.get.account__get_uid() #return str(expires_in) web.seeother("/index") except Exception: web.header("Content-Type", "text/html;charset=utf-8") return ':-( 出错了在这里222'+ str(code)
def weibo_auth_end(request): code = request.GET['code'] client = APIClient(app_key=weibo_app_key, app_secret=weibo_app_secret, redirect_uri=weibo_call_back) r = client.request_access_token(code) uid = r.uid access_token = r.access_token expires_in = r.expires_in client.set_access_token(access_token, expires_in) response = HttpResponseRedirect("/") response.set_cookie('token', access_token) response.set_cookie('expires_in', str(int(expires_in))) response.set_cookie('weibo_uid', str(uid)) show=client.users.show.get(access_token=access_token, uid=uid) username = '******' + str(uid) password = '******' first_name = 'weibo' last_name = show['screen_name'] user = auth.authenticate(username=username, password=password) if user is None: user = User.objects.create_user(username=username, password=password) user.first_name = first_name user.last_name = last_name user.save() user = auth.authenticate(username=username, password=password) auth.login(request, user) return response
def morepictures(request): weibo_client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) if request.COOKIES.has_key('access_token') is False: DEBUG_TRACE.debug("Has no acccess token") return HttpResponseRedirect(CALLBACK_URL) else: access_token = request.COOKIES['access_token'] expires_in = request.COOKIES['expires_in'] uid = request.COOKIES['uid'] page = request.GET['page'] name = request.GET['name'] weibo_client.set_access_token(access_token, expires_in) user_info = weibo_client.get.users__show(screen_name=name) screen_name = user_info.screen_name avatar_large = user_info.avatar_large photo_list = getPhotoList(weibo_client, screen_name, 5, page) t = Template(""" {% for photo in photo_list %} <li data-icon="false"><a href=""> <div class="my-li-thumb"> <img width="50" height="50" src="{{ avatar_large }}" /> </div> <h3 class="my-li-name">{{ screen_name }}</h3> <p class="my-li-text">{{ photo.text }}</p> <div class="my-li-content"> <img class="my-li-content-image" src="{{ photo.image }}" /> </div> </a></li> {% endfor %}""") c = Context({'photo_list': photo_list, 'screen_name': screen_name, 'avatar_large': avatar_large}) html = t.render(c) response = HttpResponse(html) return response
def weibo_check(request): code = request.GET.get('code', None) now = datetime.datetime.now() if code: client = APIClient(app_key=settings.APP_KEY, app_secret=settings.APP_SERCET, redirect_uri=settings.CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token # 返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 uid = r.uid # 在此可保存access token client.set_access_token(access_token, expires_in) request.session['access_token'] = access_token request.session['expires_in'] = expires_in request.session['uid'] = uid user = SupserWeibo(access_token=access_token, uid=uid, request=request) # 实例化超级微博类 # 更新数据库 if MyUser.objects.filter(uid=uid).exists(): MyUser.objects.filter(uid=uid).update(last_login=now) user.Login() # 登陆 return HttpResponseRedirect('/') else: # 创建用户并登陆 u_id = user.createUser() if u_id: return HttpResponseRedirect('/manage/user/%s/' % u_id) return HttpResponse('/404/')
class Weibo: def __init__(self, api_info): self.client = APIClient(app_key = api_info['app_key'], app_secret = api_info['app_secret']) self.client.set_access_token(api_info['access_token'], api_info['expires_in']) def get_user_weibo(self, username, page_no, count = 100): return self.client.get.statuses__user_timeline(uid = username, count = count, page = page_no) def create_weibo(self, text): return self.client.post.statuses__update(status = text) def create_weibo_with_pic(self, text, pic): return self.client.upload.statuses__upload(status = text, pic = pic) def repost_weibo(self, id, text, is_comment = 0): return self.client.post.statuses__repost(id = id, status = text, is_comment = is_comment) def follow_you(self, uid): return self.friendships__create(uid = uid) def comments_show(self, id): ''' list all the reply of one weibo ''' return self.client.get.comments__show(id = id) def comments_create(self, id, text): return self.client.post.comments__create(id = id, comment = text) def comments_reply(self, id, cid, text): return self.client.post.comments__reply(id = id , cid = cid, comment = text)
def weiboLogcheck(request): code = request.GET.get('code', None) if code: client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token # 返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 uid = r.uid # 在此可保存access token client.set_access_token(access_token, expires_in) weibo_res = client.get_user_time_line(0) text = weibo_res.statuses uname = text[0]['user']['name'] try: exitUser=Users.objects.filter(login_type='1').get(weibo_id=uid) request.session['logintype']=1 user = authenticate(username=uname,password=uid) if user is not None: login(request, user) return HttpResponseRedirect('/personalRecommend/', {'current_time': datetime.now(),'uname':request.user.username}) except Users.DoesNotExist : Users.create_weiboUser(uname,uid) user = authenticate(username=uname,password=uid) if user is not None: login(request, user) request.session['logintype']=1 return render_to_response('weibologin/tasteTest.html', {'current_time': datetime.now(),'liveJob_list':liveJob_list,'liveType_list':liveType_list})
def weiboClient(self): APP_KEY='1257616669' APP_SECRET='b8d924e1b6aa10f0bbd4e7af6ed1bf19' CALLBACK_URL='https://api.weibo.com/oauth2/default.html' AUTH_URL='https://api.weibo.com/oauth2/authorize' USERID='' PASSWD='' client=APIClient(app_key=APP_KEY,app_secret=APP_SECRET,redirect_uri=CALLBACK_URL) referer_url=client.get_authorize_url() print "referer url is: %s" % referer_url cookies=urllib2.HTTPCookieProcessor() opener=urllib2.build_opener(cookies) urllib2.install_opener(opener) postdata={ "client_id":APP_KEY, "redirect_uri":CALLBACK_URL, "userId":USERID, "passwd":PASSWD, "isLoginSina":"0", "action":"submit", "response_type":"code", } headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0", "Host": "api.weibo.com", "Referer": referer_url } req=urllib2.Request(url=AUTH_URL,data=urllib.urlencode(postdata),headers=headers) try: resp=urllib2.urlopen(req) print "callback url is : %s" % resp.geturl() code=resp.geturl()[-32:] print "code is %s" % code except Exception, e: print e
def weibo_check(request): code = request.GET.get('code', None) now = datetime.datetime.now() if code: client = APIClient(app_key=settings.APP_KEY, app_secret=settings.APP_SERCET, redirect_uri=settings.CALLBACK_URL) r = client.request_access_token(code) access_token = r.access_token # 返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 uid = r.uid # 在此可保存access token client.set_access_token(access_token, expires_in) request.session['access_token'] = access_token request.session['expires_in'] = expires_in request.session['uid'] = uid user = SupserWeibo(access_token=access_token, uid=uid, request=request) # 实例化超级微博类 # 更新数据库 if MyUser.objects.filter(uid=uid).exists(): MyUser.objects.filter(uid=uid).update(last_login=now) user.Login() # 登陆 return HttpResponseRedirect('/') else: # 创建用户并登陆 u_id = user.createUser() if u_id: return HttpResponseRedirect('/manage/user/%s/' %u_id) return HttpResponse('/404/')
def auth_signin(): ''' Redirect to sina sign in page. ''' ctx.response.set_cookie(COOKIE_REDIRECT, _get_referer()) client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK) raise seeother(client.get_authorize_url())
def get(self): userid = self.get_current_userid() backurl = self.get_argument('backurl', None) self.set_cookie('backurl'+str(userid), backurl) client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() return self.redirect(url)
def login(): client = APIClient( app_key = current_app.config['APP_KEY'], app_secret = current_app.config['APP_SECRET'], redirect_uri = current_app.config['CALLBACK_URL']) url = client.get_authorize_url() return redirect(url)
def searchfriend(request): weibo_client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) if request.COOKIES.has_key('access_token') is False: return HttpResponseRedirect(CALLBACK_URL) else: access_token = request.COOKIES['access_token'] expires_in = request.COOKIES['expires_in'] uid = request.COOKIES['uid'] search_value = request.GET['searchvalue'] weibo_client.set_access_token(access_token, expires_in) search_result = weibo_client.get.search__suggestions__users(q=search_value) user_info = weibo_client.get.users__show(screen_name=search_value) result = [entry.screen_name for entry in search_result] if user_info.screen_name not in result: result.insert(0, user_info.screen_name) t = Template(""" {% for name in result %} <li><a href="photogallary?query_screen_name={{ name }}"> <h3>{{ name }}</h3> </a></li> {% endfor %} """) c = Context({'result':result}) html = t.render(c) response = HttpResponse(html) return response
def morefriends(request): weibo_client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) if request.COOKIES.has_key('access_token') is False: DEBUG_TRACE.debug("Has no acccess token") return HttpResponseRedirect(CALLBACK_URL) else: access_token = request.COOKIES['access_token'] expires_in = request.COOKIES['expires_in'] uid = request.COOKIES['uid'] friend_cursor = request.GET['friend_cursor'] weibo_client.set_access_token(access_token, expires_in) friend_info = weibo_client.get.friendships__friends(uid=uid, count=20, cursor=friend_cursor) friend_list = getFriendList(friend_info) t = Template(""" {% for friend in friend_list %} <li><a href="photogallary?query_screen_name={{ friend.screen_name }}"> <img width="80" height="80" src="{{ friend.avatar_large }}"></img> <h3>{{ friend.screen_name }}</h3> <p>{{ friend.description }}</p> </a></li> {% endfor %} """) c = Context({'friend_list': friend_list}) html = t.render(c) response = HttpResponse(html) return response
def build_token(self): all_tokens = [] tmp = {} app_key = APP_KEY app_secret = APP_SECRET callback_url = CALLBACK_URL for i in range(len(app_key)): A_K = app_key[i] A_S = app_secret[i] C_U = callback_url client = APIClient(A_K, A_S, C_U) print 'authorize_url: ', client.get_authorize_url() code = raw_input('code: ') r = client.request_access_token(code) access_token = r.access_token # 新浪返回的token,类似abc123xyz456 expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 tmp['APP_KEY'] = A_K tmp['APP_SECRET'] = A_S tmp['CALLBACK_URL'] = C_U tmp['token'] = access_token tmp['expires'] = expires_in all_tokens.append(tmp) tmp = {} f = file(self.token_file, 'w') json.dump(all_tokens, f) f.close()
def post(self): god_name = self.request.get('god_name') access_token = self.request.get('access_token') expires_in = self.request.get('expires_in') self.response.out.write("""<html><head><title>Weibo-spy-result</title></head><body><center>""") if god_name == "": self.response.out.write("""<h2>4 Input can not be empty! <a href="/">Back</a></h2>""") else: client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client.set_access_token(access_token, expires_in) info = client.statuses.user_timeline.get() #可以考虑cookie oauth_user = OauthUser(key_name=info['statuses'][0]['user']['idstr']) oauth_user.sina_uid = info['statuses'][0]['user']['idstr'] oauth_user.sina_access_token = str(access_token) oauth_user.sina_expires = int(expires_in) status = client.statuses.user_timeline.get(screen_name=god_name) God(user=oauth_user, god_name=god_name, sina_last_id=str(status['statuses'][0]['id'])).put() self.response.out.write('Your spy settings are successfully done!<br>') self.response.out.write('The last tweet synchronized is below:<br>') for result in status['statuses']: self.response.out.write('<b>%s</b><br>' % result.text) self.response.out.write('</center></body></html>')
def get(self): query = db.GqlQuery("SELECT * FROM OauthUser") if query.count() > 0: for result in query: client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client.set_access_token(result.sina_access_token, result.sina_expires) for god in result.god_name: ttl = client.statuses.user_timeline.get(screen_name=god.god_name, since_id=god.sina_last_id) tweet = "" if len(ttl['statuses']) > 0: god.sina_last_id=ttl['statuses'][0]['idstr'] god.put() for res in ttl['statuses']: tweet = tweet + res.text + "NEXT" if len(tweet) > 0: message = mail.EmailMessage() message.subject = god.god_name message.sender = Mail_from message.to = Mail_to message.body = """ %s """ % tweet message.send()
def event_func(): APP_KEY = "2218208544" APP_SECRET = "956ae245a2f62a11a9eca1d91fbda092" CALLBACK_URL = "http://cdgir.cumt.edu.cn/ShowCode.aspx" client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() print url webbrowser.open(url) code = raw_input("input the code:").strip() print code r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in client.set_access_token(access_token, expires_in) poi_result = client.place.nearby.pois.get(lat="39.98435", long="116.30999") text = "" print poi_result.total_number for val in poi_result.pois: # for k, v in val.items(): # print ("%s : %s" % (k,v))这个是val这个dic的循环遍历 text += "%s\t%s\t%s\t%s\t%s\r\n" % (val.poiid, val.title, val.lon, val.lat, val.address) # 可参考api的json返回示例 # print text.encode('utf-8') # print text.encode('utf-8') open("poi.txt", "a").write(text.encode("utf-8"))
class Sina: def __init__(self, app_key, app_secret, redirect_uri): self.client = APIClient(app_key, app_secret, redirect_uri) if not os.path.exists("./sinadb"): self.request_url = self.client.get_authorize_url() print self.request_url code = raw_input('waiting code:') f = open("./sinadb", 'w') f.write(str(code)) r = self.client.request_access_token(code) access_token = r.access_token f.write(str(access_token)) expires_in = r.expires_in f.write(str(expires_in)) f.close() else: f = open("./sinadb", 'r') code = f.readline().replace("\n",'') access_token = f.readline().replace("\n",'') expires_in = f.readline().replace("\n",'') self.client.set_access_token(access_token, expires_in) def twite(self): input_status=raw_input('STATUS: ') if input_status == "quit": return -1 pic_path=raw_input('PICTURE: ') if not pic_path: self.client.post.statuses__update(status=input_status) else: self.client.upload.statuses__upload(status=input_status, pic=open(pic_path))
def login_weibo(): client = APIClient(app_key=current_app.config["APP_KEY"], app_secret=current_app.config["APP_SECRET"], redirect_uri=request.host_url + url_for(".weibo_callback")) url = client.get_authorize_url() return redirect(url)
def new_view(request, *args, **kwargs): if 'token' in request.session and 'expire' in request.session: client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client.set_access_token(request.session['token'], request.session['expire']) if client.is_expires(): return render(request, 'loginForm.html') return view(request, client, *args, **kwargs) return render(request, 'loginForm.html')
def __init__(self): Appkey = "3423280349" Appsecret = "1f74f37b71c5ca2e0faadc41129d516a" callbackurl = "http://www.baidu.com" ack = "2.00pVrsKC3mz1gE840b5f298788d81D" expin = "7801776" self.client = APIClient(app_key=Appkey, app_secret=Appsecret) self.client.set_access_token(ack, expin)
def auto_login(): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() web_conn = urllib.urlopen(url) print web_conn.info() print web_conn.read()
def login_weibo(): callbackUrl = request.args.get('next', CALLBACK_URL) client_ = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=callbackUrl) url = client_.get_authorize_url() print url return redirect(url)
def __init__(self,*aTuple): self._appKey = aTuple[0] #your app key self._appSecret = aTuple[1] #your app secret self._callbackUrl = aTuple[2] #your callback url self._account = aTuple[3] #your weibo user name (eg.email) self._password = aTuple[4] # your weibo pwd self.AppCli = APIClient(app_key=self._appKey,app_secret=self._appSecret,redirect_uri=self._callbackUrl) self._author_url = self.AppCli.get_authorize_url() self._getAuthorization()