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. django -- ORM建表

    前戏 ORM(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ORM的优势: ORM解决的主要问题是对象和关系的映射 ...

  2. Comet OJ - Contest #1 C 复读游戏(状态压缩)

    题意 https://www.cometoj.com/contest/35/problem/C?problem_id=1498 思路 这题要用到一种比较小众的状压方法(没见过的话可能一时比较难想到). ...

  3. c++功能与方法笔记

    1. windows判断创建目录 #include <Shlwapi.h> #pragma comment(lib, "shlwapi.lib") //windows ...

  4. Docker环境下的前后端分离项目部署与运维(六)搭建MySQL集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  5. 收藏:png8和png24的根本区别

    1.png8和png24的根本区别,不是颜色位的区别,而是存储方式不同. 2.png8有1位的布尔透明通道(要么完全透明,要么完全不透明),png24则有8位(256阶)的布尔透明通道(所谓半透明). ...

  6. python 统计字符串中指定字符出现次数的方法

    python 统计字符串中指定字符出现次数的方法: strs = "They look good and stick good!" count_set = ['look','goo ...

  7. rpc通讯

    dotnet core各rpc组件的性能测试 一般rpc通讯组件都具有高性特性,因为大部分rpc都是基于二进制和连接复用的特点,相对于HTTP(2.0以下的版本)来说有着很大的性能优势,非常适合服务间 ...

  8. Java8 流式 API(`java.util.stream`)

    熟悉 ES6 的开发者,肯定对数组的一些方法不是很陌生:map.filter 等.在对一组对象进行统一操作时,利用这些方法写出来的代码比常规的迭代代码更加的简练.在 C♯ 中,有 LINQ 来实现.那 ...

  9. Prometheus部署各服务的Node监控

    1.部署监控主机 部署主机监控,需要安装node_exporter 1.1 下载node exporter wget https://github.com/prometheus/node_export ...

  10. CountDownLatch源码

    public class CountDownLatchExample1 { public static void main(String[] args) throws Exception { Exec ...