import json
from datetime import datetime import MySQLdb
import requests
from flask import Flask, redirect, request app = Flask(__name__) class ApiError(Exception):
def __init__(self, code, msg):
super(ApiError, self).__init__()
self.code = code
self.msg = msg def __str__(self):
return '{0}:{1}'.format(self.code, self.msg) class ServerError(Exception):
pass class WeiboClient(object): API_URL = 'https://api.weibo.com/' def __init__(self, client_id, client_secret):
self.client_id = client_id
self.client_secret = client_secret
self.token = {} @property
def access_token(self):
if self.token:
return self.token['access_token']
return None def fetch(self, method, url, params={}):
'''
接口请求的统一封装
:param method:
:param url:
:param params:
:return:
'''
try:
if method == 'POST':
resp = requests.post(url, params)
else:
resp = requests.get(url, params) if resp.status_code >= 200 and resp.status_code < 300:
# 接口正常
rest = resp.json()
if 'error_code' in rest:
raise ApiError(rest['error_code'], rest['error'])
return rest
elif resp.status_code >= 400:
raise ServerError()
except ApiError as e:
print('ApiError')
pass
except ServerError as e:
print('ServerError')
except Exception:
print('Exception') def get_ticket_url(self, redirect_uri=None):
'''
获取从浏览器跳转的 url
:param redirect_uri:
:return:
'''
if redirect_uri is None:
redirect_uri = 'http://test.baidu.com'
url = self.API_URL + 'oauth2/authorize?client_id={0}&response_type=code&redirect_uri={1}'.format(
self.client_id,
redirect_uri
)
# get请求
return url def get_token(self, code):
'''
获取token
:param code:
:return:
'''
# 如果已经有了,则直接返回
if self.token:
return self.token
url = self.API_URL + 'oauth2/access_token?client_id={0}&client_secret={1}&grant_type=authorization_code&redirect_uri=http://test.baidu.com&code={2}'.format(
self.client_id,
self.client_secret,
code
)
resp = self.fetch('POST', url)
self.token = resp.json()
return self.token def get_user_info(self, access_token, uid):
'''
获取用户信息
:param code:
:param uid:
:return:
'''
url = self.API_URL + '2/users/show.json'
# access_token = self.get_token(code)['access_token']
resp = self.fetch('GET', url, {
'access_token': access_token,
'uid': uid
})
return resp.json() def get_conn(self):
""" 获取mysql 的连接 """
try:
conn = MySQLdb.connect(
db='db_user',
host='localhost',
user='root',
password='',
charset='utf8'
)
except:
pass
return conn def weibo_share(self):
'''
分享数据到微博
:param access_token:
:return:
''' url = self.API_URL + '2/statuses/share.json'
resp = self.fetch('POST', url, {
# 'access_token': self.access_token,
'status': '现在是北京时间: {0} http://test.baidu.com'.format(datetime.now())
})
return resp client_id = '3xxxx3'
client_secret = '0b4axxxx'
client = WeiboClient(client_id, client_secret) @app.route('/')
def index():
code = request.args.get('code', None)
# 根据code来获取token
token = client.get_token(code)
# 获取用户信息 user_info = client.get_user_info(token['access_token'], token['uid'])
third_id = user_info['id']
nickname = user_info['screen_name']
headimg = user_info['profile_image_url'] # 获取数据库的链接
conn = client.get_conn()
cursor = conn.cursor()
sql = "INSERT INTO `user`(`third_id`, `nickname`, `headimg`) VALUES('{third_id}', '{nickname}', '{headimg}')".format(
third_id=third_id, nickname=nickname, headimg=headimg)
print(sql)
cursor.execute(sql)
conn.autocommit(True)
return json.dumps(user_info) @app.route('/weibo')
def weibo():
ticket = client.get_ticket_url()
return redirect(ticket) @app.route('/share')
def share():
rest = client.weibo_share()
return json.dumps(rest) if __name__ == '__main__':
app.run(debug=True, port=80)

微博api接口登陆,获取信息,分享微博的更多相关文章

  1. 简单几行代码使用百度地图API接口分页获取信息

    首发于: 万能助手扩展开发:使用百度地图API接口分页获取信息_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=426 使用 ...

  2. 后端API接口的错误信息返回规范

    前言 最近我司要制定开发规范.在讨论接口返回的时候,后端的同事询问我们前端,错误信息的返回,前端有什么意见? 所以做了一些调研给到后端的同事做参考. 错误信息返回 在使用API时无可避免地会因为各种情 ...

  3. 2)实现github自动登陆获取信息

    # -*- coding:utf-8 -*- # __author__ = 'lixiang' # 实现github自动登陆和获取数据 import requests from bs4 import ...

  4. 如何利用百度音乐播放器的API接口来获取高音质歌曲

    第一步:在网页中打开以下网址: http://box.zhangmen.baidu.com/x?op=12&count=1&title=时间都去哪儿了$$王铮亮$$$$ 其中红色地方可 ...

  5. Winform混合式开发框架访问Web API接口的处理

    在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...

  6. php 登录注册api接口代码

    /** *一览(www.yl1001.com) * PHP开发API接口 服务端 */ require 'conn.php'; //连接数据库的文件 header('Content-Type:text ...

  7. 简单天气应用开发——API接口

    寒假回家无事,想到自学iOS开发已有一段时间,还没做过真正自己的应用,就起了做一个天气预报App的念头. 想到就做.天气预报第一步自然是找到好用的API接口来获取天气信息.在百度上搜索了一圈,找到的都 ...

  8. 微信小程序+OLAMI(欧拉蜜)自然语言API接口制作智能查询工具--快递、聊天、日历等

    微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你 ...

  9. API接口设计

    1.场景描述 比如说我们要做一款APP,需要通过api接口给app提供数据.假设我们是做商城,比如我们卖书的.我们可以想象下这个APP大概有哪些内容: 1)首页:banner区域(可以是一些热门书籍的 ...

随机推荐

  1. BBS项目-01

    目录 BBS项目 BBS开发流程: BBS表格创建: BBS项目 BBS开发流程: BBS项目: 开发流程: 需求分析 草拟一些项目的大致技术点和流程 架构设计 架构师(框架 语言 数据库 缓存数据库 ...

  2. Salesforce Lightning开发学习(三)Component表单初解

    初步了解了Lightning的组件开发流程后,我们来认识下lightning的表单 点击对象管理器,选择对象:电影(Movie__c),创建字段 标签 API 数据类型  票价  Number__c ...

  3. JS 常见问题

    JavaScript 是一种有趣的语言,我们都喜欢它,因为它的性质.浏览器是JavaScript的主要运行的地方,两者在我们的服务中协同工作.JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计 ...

  4. Golang(六)time 包的用法整理

    1. 常用结构体 Duration:type Duration int64,时间长度,对应单位包括 Nanosecond(纳秒).Microsecond(微妙).Millisecond(毫秒).Sec ...

  5. Python【每日一问】21

    问: [基础题]输入某年某月某日,判断这一天是这一年的第几天? [提高题]用 *号输出字母 C的图案 答: [基础题]输入某年某月某日,判断这一天是这一年的第几天? 方法1: import time ...

  6. Atlassian JIRA 插件开发之一 环境搭建

    参考 https://developer.atlassian.com/server/framework/atlassian-sdk/  download the SDK 说明 Download the ...

  7. Jenkins工具学习(一)

    Jenkins的下载及安装 Jenkins下载地址:https://jenkins.io/download/ 下载后的直接解压安装 根据自己的喜好选择一种方式安装: 如果选择推荐安装,会自动下载一些插 ...

  8. [转帖]k8s 基本使用(上)

    k8s 基本使用(上) https://www.jianshu.com/p/8d60ce1587e1 本文将介绍 k8s 中的一些最基本的命令,并辅以解释一些基本概念来方便理解,也就是说,本文是一篇偏 ...

  9. 【实战经验】--Xilinx--IPCore--FIFO

    2019.12.10补充 结论:先写进的数据在独处时位于高位,后写入的数据在低位,且排序单位为Byte,即先后写入0X01,0X02,读出后也为0x010x02,此外,在写入数据量达到读出数据位宽后5 ...

  10. scratch教程:学做控制类积木

    少儿编程中scratch很容易被小孩所接受,不管是从外观还是教程中,都符合少儿的兴趣,为此现在只要是开少儿编程课都会有scratch课程,今天娜娜姐小码王scratch培训机构就为大家分享,scrat ...