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
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 get_weibo_client(): APP_KEY = APP_KEY[0] APP_SECRET = APP_SECRET[0] CALLBACK_URL = CALLBACK_URL client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) print 'authorize_url: ', client.get_authorize_url() code = raw_input('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 print 'access_token: ', access_token print 'expires_in: ', expires_in # store in local f = file('token.json', 'w') token = dict(token=access_token, expires=expires_in) json.dump(token, f) f.close() client.set_access_token(access_token, expires_in) return client
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 publish(msg): # print msg #print url code_obj = Code.objects.first() client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) try: if code_obj and code_obj.access_token and code_obj.expires_in: pass else: if not code_obj: return redirect(client.get_authorize_url()) r = client.request_access_token(code_obj.code) code_obj.access_token = r.access_token # 新浪返回的token,类似abc123xyz456 code_obj.expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 code_obj.save() access_token = code_obj.access_token expires_in = code_obj.expires_in assert access_token print expires_in ### TODO: 在此可保存access token print "access_token", access_token print 'expires_in', expires_in client.set_access_token(access_token, expires_in) # print client.get.statuses__user_timeline() print client.post.statuses__update(status=msg) except: return redirect(client.get_authorize_url())
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"))
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
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 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
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 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)
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)
class WebOAuthHandler(): """继承自OAuthHandler,提供Web应用方法。""" def __init__(self, callback_url, access_token=None, expires_in=None): self.client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=callback_url) if access_token is not None: logging.info("access_token: %s, expire: %s" % (access_token, expires_in)) self.client.set_access_token(str(access_token), str(expires_in)) def get_authorize_url(self): return self.client.get_authorize_url() def update(self, message): """添加一条新微博信息""" message = message.encode("utf-8") self.client.post.statuses__update(status=message) def upload(self, filename, message): message = message.encode("utf-8") f = open(filename) self.client.upload.statuses__upload(status=message, pic=f) f.close() def upload_color(self, message, color_value): """上传颜色图片微博""" message = message.encode("utf-8") data = generate_image_helper.generate_image(color_value) logging.info('status: %s, data: %s' % (message, data)) self.client.upload.statuses__upload(status=message, pic=data) def get_user(self, uid): user = self.client.get.users__show(uid=uid) return user
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 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 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不会自动关闭文件,需要手动关闭
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 get_weibo_by_uid(uid, access_token, expires_in): print uid client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client.set_access_token(access_token, expires_in) result = client.statuses.user_timeline.get(uid=uid,count=200) weibo = result.get("statuses") return weibo
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 weibo_login(): app_key = current_app.config['APP_KEY'] app_secret = current_app.config['APP_SECRET'] callback_url = current_app.config['CALLBACK_URL'] client = APIClient(app_key=app_key, app_secret=app_secret, redirect_uri=callback_url) code = request.args.get('code') try: r = client.request_access_token(code) except APIError: flash('Invalid weibo code. Please Try again.') return redirect(request.args.get('next') or url_for('auth.login')) access_token = r.access_token expires_in = r.expires_in client.set_access_token(access_token, expires_in) uid = r.get('uid') if uid is None: flash('Not found uid of weibo') return redirect(request.args.get('next') or url_for('auth.login')) screen_name = client.statuses.user_timeline.get().get('statuses')[0].get('user').get('screen_name') user = User.query.filter_by(weibo_uid=uid).first() if user is None: user = User(weibo_uid=uid, username=screen_name, confirmed=True) user.upgrade_bind_mode() db.session.add(user) db.session.commit() login_user(user) # the second argument is 'remember me' return redirect(request.args.get('next') or url_for('main.index'))
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 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)
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)
class Crawler(): def __init__(self, client_id, redirect_uri, username, passwd): url = "https://api.weibo.com/oauth2/authorize?client_id="+client_id+"&redirect_uri="+redirect_uri+"&response_type=code" conn = httplib.HTTPSConnection("api.weibo.com") postdata = urllib.urlencode({'client_id':client_id,'redirect_uri':redirect_uri,'action':'submit','userId':username,'passwd':passwd}) conn.request('POST','/oauth2/authorize',postdata,{'Referer':url, 'Content-Type': 'application/x-www-form-urlencoded'}) res = conn.getresponse() page = res.read() code = res.msg['Location'].split("?")[1][5:] self.client = APIClient(app_key=client_id, app_secret=app_scret, redirect_uri=redirect_uri) r = self.client.request_access_token(code) self.access_token = r.access_token # expires_in = r.expires_in self.client.set_access_token(r.access_token, r.expires_in) def users_show(self, user_id): print self.client.users.show.get(uid=user_id) def friendships_followers_active(self, user_id): print self.client.friendships.followers.active.get(uid = user_id) def statuses_user_timeline(self, user_id): print self.client.statuses.user_timeline.get(uid = user_id, page = 1) def statuses_go(self, user_id): print self.client.statuses.go.get(uid = user_id)
def fortest(request): client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) access_token = myredis.lindex("token_"+str(request.session['uid']),0) expires_in = myredis.lindex("token_"+str(request.session['uid']),1) client.set_access_token(access_token, expires_in) uid = request.session['uid'] return HttpResponse("your uid: "+str(uid)+"<br />your weibo: "+client.get.statuses__user_timeline()["statuses"][0]["text"].encode("utf-8"))
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 register(request): if 'code' in request.GET: code = request.GET.get('code') client = APIClient(app_key=settings.WEIBO_APP_KEY, app_secret=settings.WEIBO_APP_SECRET, redirect_uri=settings.WEIBO_REDIRECT) 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) user = client.users.show.get(uid=uid) username = user.name avatar = user.profile_image_url if UserenaSignup.objects.filter(user__username__iexact=username): pass else: new_user = UserenaSignup.objects.create_user(username, username, '', uid, not userena_settings.USERENA_ACTIVATION_REQUIRED, userena_settings.USERENA_ACTIVATION_REQUIRED) myProfile = MyProfile.objects.get(user=new_user) myProfile.socialImageUrl = avatar myProfile.save() user = authenticate(username=username, password=uid) login(request, user) return HttpResponseRedirect('/')
def callback(): i = web.input() code = i.get("code", None) if code: # /callback?code=xxx client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET) token = client.request_access_token(code, _CALLBACK_URL) logging.info("got access token: %s" % str(token)) uid = token.uid kw = dict(access_token=token.access_token, expires_in=token.expires_in) # check for update: if 0 == db.update("user", where="uid=$uid", vars=dict(uid=uid), **kw): # create user: client.set_access_token(token.access_token, token.expires_in) user = client.get.users__show(uid=uid) kw["uid"] = uid kw["name"] = user.screen_name kw["gender"] = user.gender kw["province_code"] = user.province kw["city_code"] = user.city kw["image_url"] = user.profile_image_url db.insert("user", **kw) # make a cookie: web.setcookie("weibouser", _make_cookie(uid, token.access_token), int(token.expires_in - time.time())) raise web.found("/index")
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})
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
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 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 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 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 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 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 publish(msg): # print msg #print url code_obj = Code.objects.first() client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) try: if code_obj and code_obj.access_token and code_obj.expires_in: pass else: if not code_obj: return redirect(client.get_authorize_url()) r = client.request_access_token(code_obj.code) code_obj.access_token = r.access_token # 新浪返回的token,类似abc123xyz456 code_obj.expires_in = r.expires_in # token过期的UNIX时间:http://zh.wikipedia.org/wiki/UNIX%E6%97%B6%E9%97%B4 code_obj.save() access_token = code_obj.access_token expires_in = code_obj.expires_in assert access_token print expires_in ### TODO: 在此可保存access token print "access_token", access_token print 'expires_in', expires_in client.set_access_token(access_token, expires_in) # print client.get.statuses__user_timeline() print client.post.statuses__update(status=msg) except: return redirect(client.get_authorize_url())
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 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 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 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 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 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 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 get_client(wid): conn = get_db() weibo_info = conn.weibos.find_one({'wid': wid}) client_ = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client_.set_access_token(weibo_info['access_token'], weibo_info['expire_in']) return client_
def authorization(self, **kwargs): APP_KEY = kwargs.get("APP_KEY") APP_SECRET = kwargs.get("APP_SECRET") CALLBACK_URL = kwargs.get("CALLBACK_URL") USER = kwargs.get("USER") PWD = kwargs.get("PWD") client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) url = client.get_authorize_url() driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(30) driver.get(url) time.sleep(5) driver.find_element_by_id("userId").send_keys(USER) ActionChains(driver).double_click( driver.find_element(by=By.XPATH, value="/html/body/label")).perform() for i in PWD: pyautogui.hotkey(i) time.sleep(2) dis = driver.find_element_by_xpath( "//*[@id=\"outer\"]/div/div[2]/form/div/div[1]/div[1]/p[3]" ).get_attribute("style") if not dis == 'display: none;': ActionChains(driver).double_click( driver.find_element( by=By.XPATH, value= "//*[@id=\"outer\"]/div/div[2]/form/div/div[1]/div[1]/p[3]/label" )).perform() print('输入输入验证码登录后再往控制台按回车键:') input() driver.find_element_by_xpath( "//*[@id=\"outer\"]/div/div[2]/form/div/div[2]/div/p/a[1]").click( ) time.sleep(1) try: driver.find_element_by_xpath( "//*[@id=\"outer\"]/div/div[2]/form/div/div[2]/div/p/a[1]" ).click() time.sleep(1) except: pass code = driver.current_url.split("code=")[-1] driver.minimize_window() print(code) r = client.request_access_token(code) print(r) self.access_token = r.access_token # 新浪(授权服务器)返回的token expires_in = r.expires_in client.set_access_token(self.access_token, expires_in) self.client = client driver.close()
def prepare(): code = getCode(USER_ID, PASSWORD) client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) response = client.request_access_token(code) access_token = response.access_token expires_in = response.expires_in client.set_access_token(access_token, expires_in) return client
def get_auth_client(): """get a auth weibo api client""" client = APIClient(app_key=conf.APP_KEY, app_secret=conf.APP_SECRET, redirect_uri=conf.CALLBACK_URL) url = client.get_authorize_url() code = get_code(url) r = client.request_access_token(code) client.set_access_token(r.access_token, r.expires_in) return client
def login(code): print 'Login...', 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 client.set_access_token(access_token, expires_in) print 'success!!!' return client
def getAppClient(self, accountType): app_key = configReader.getOptionValue(accountType, 'appKey') app_secret = configReader.getOptionValue(accountType, 'appSecret') callback = configReader.getOptionValue(accountType, 'callbackUrl') access_token = configReader.getOptionValue(accountType, 'access_token') expires = configReader.getOptionValue(accountType, 'expireIn') appClient = APIClient(app_key=app_key, app_secret=app_secret, redirect_uri=callback) appClient.set_access_token(access_token=access_token, expires=expires) return appClient
def GET(self): access_token = session.get('access_token',None) uid = session.get('uid',None) expires_in = session.get('expires_in',None) if access_token != None and uid!=None and expires_in!=None: client = APIClient(app_config.APP_KEY, app_secret=app_config.APP_SECRET, redirect_uri=app_config.CALLBACK_URL) client.set_access_token(access_token,expires_in) return showUserInfo(client,uid,expires_in) else: client = APIClient(app_key=app_config.APP_KEY, app_secret=app_config.APP_SECRET, redirect_uri=app_config.CALLBACK_URL) url = client.get_authorize_url() web.seeother(url)
def name2uid(username): """ 昵称转uid """ client = APIClient(app_key=APP_KEY, app_secret=APP_SECRET, redirect_uri=CALLBACK_URL) client.set_access_token(ACCESS_TOKEN, EXPIRES_IN) try: results = client.users__show(screen_name=username) uid = client.users__show(screen_name=username)['id'] except: return '' return str(uid)
def access_client(): app_key='' app_secret='' redirect_uri='' #写死token access_token='2.00PST4KCWVrioD3aee250b49D7w6oB' expires_in='1520329130' client = APIClient(app_key=app_key, app_secret=app_secret, redirect_uri=redirect_uri) client.set_access_token(access_token,expires_in) return client
def weiboLoginBack(request): #得到微博认证的信息 code = request.GET['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 # TODO: 在此可保存access token request.session['access_token'] = access_token request.session['expires_in'] = expires_in client.set_access_token(access_token, expires_in) #测试发微博 # status = u'亲们,俺刚才手快,测试了一把,您别b4啊!' # client.post.statuses__update(status=status) #得到微博用户的id,如果有绑定,则直接登录,没有则跳到绑定页面 json_obj = client.get.statuses__user_timeline() weibo_user = json_obj['statuses'][0]['user'] #得到用户的weibo UID weibo = weibo_user['id'] # request.session['weibo_client'] = client request.session['weibo'] = weibo #得到用户的微博nick weibo_nick = weibo_user['screen_name'] request.session['weibo_nick'] = weibo_nick a = Admin.objects.filter(weibo=weibo) #先尝试admin登陆 if len(a) != 0: request.session['admin'] = a[0] now = datetime.datetime.now() list = Match.objects.filter(matchtime__gte=now).order_by( '-state', 'matchtime') c = Context({'list': list, 'session': request.session}) t = loader.get_template('admin.htm') return HttpResponse(t.render(c)) #尝试用户登陆 u = Gambler.objects.filter(weibo=weibo) if len(u) != 0: gambler = u[0] request.session['gambler'] = gambler gambler.weibo_nick = weibo_nick gambler.save() return myaccount(request) else: c = Context({ 'info': 'Please bind your account or register first!', 'session': request.session }) t = loader.get_template('bind.htm') return HttpResponse(t.render(c)) return HttpResponseRedirect("/")
def refresh_client(): cursor = get_connect() re_token = get_token(cursor, 'refresh') re_client = APIClient(app_key=CO_APP_KEY, app_secret=CO_APP_SECRET, redirect_uri=CO_CALLBACK_URL) rt = re_client.refresh_access_token(re_token) if not rt.get('access_token'): return False uid, ac_token, rf_token, expires_in = rt.get('uid', -1), rt.get('access_token', ''), rt.get('refresh_token', ''), rt.get('expires_in', '') insert_token = '''insert into access_token set uid=%s, access_token=%s, refresh_token=%s, expires_in=%s, create_at=%s on duplicate key update access_token=%s, refresh_token=%s, expires_in=%s''' cursor.execute(insert_token, (uid, ac_token, rf_token, expires_in, time.time(), ac_token, rf_token, expires_in)) cursor.connection.close() re_client.set_access_token(ac_token, expires_in) return re_client
def _get_sina_profile(self, code=None, openid=None, request=None): redirect_uri = request.build_absolute_uri('authentication_callback') sina_client = APIClient(app_key=settings.SINA_APP_ID, app_secret=settings.SINA_APP_SECRET, redirect_uri=redirect_uri) # Get a legit access token access_token_dict = sina_client.request_access_token(code) access_token = access_token_dict.access_token sina_client.set_access_token(access_token, access_token_dict.expires_in) # Read the user's profile information try: sina_profile = sina_client.account.profile.basic.get() sina_id = str(sina_profile['id']) sina_email = sina_profile['email'] except Exception as e: LOG.warn("SinaAPIClient Error: %s", e) messages.error(request, 'You SinaID is not authorized to login.') return None # Validate the user valid = False # Get the user's bilateral friends. uid = settings.SINA_GROUP_ID page = 1 all_friends = [] while True: try: friends = sina_client.friendships.friends.bilateral.get( uid=uid, page=page) # no more friends. if friends['total_number'] == 0: break except Exception as e: LOG.debug('Error: %s', e) break all_friends.extend(friends['users']) page = page + 1 user_ids = [str(user['id']) for user in all_friends] if sina_id in user_ids: valid = True else: messages.error(request, "Your sinaID is not followed by %s yet." % uid) return dict(user_id=sina_id, user_email=sina_email, access_token=access_token, valid=valid)
def getAuth(self): client = APIClient(app_key=self.app_key, app_secret=self.app_secret, redirect_uri=self.redirect_uri) # get the authenticate page url url = client.get_authorize_url() # retrieve the authenticate code automatically code = self.get_code(url) # get access token via the code r = client.request_access_token(code) access_token = r.access_token expires_in = r.expires_in # set token to the client client.set_access_token(access_token, expires_in) return client