chinaapi 0.8.9
Python SDK For China API: Sina Weibo, QQ Weibo, Taobao, Renren, Douban
License: Apache 2.0

ChinaAPI
========

.. image:: https://travis-ci.org/smallcode/ChinaAPI.png
    :target: https://travis-ci.org/smallcode/ChinaAPI

.. image:: https://badge.fury.io/py/chinaapi.png
    :target: http://badge.fury.io/py/chinaapi


ChinaAPI是一个API库，使用Python编写。

目前国内的几大开放平台，有新浪微博，腾讯微博，淘宝，人人，豆瓣等。
针对这几个平台，用Python语言编写的API库都比较独立，各具特色。
但仔细分析，不难发现这些库存在大量可通用的模块，并可抽象出统一的调用接口。
ChinaAPI就是为此目的而存在。

安装
---
项目地址：https://github.com/smallcode/ChinaAPI

最简单的安装方法:

.. code-block:: bash

    $ pip install chinaapi

注：ChinaAPI使用： `Requests`_  （Http请求模块）

----

新浪微博API:
--------

Client使用方法：

.. code-block:: python

        from chinaapi.sina.weibo.open import Client


        client = Client()
        client.set_access_token('access_token')  # 填上取得的token（可通过OAuth2取得）

        # 获取用户信息，对应的接口是：users/show
        r = client.users.show(uid=123456)
        print r.name  # 显示用户名

        # 发布带图片的微博，对应的接口是：statuses/upload
        with open('pic.jpg', 'rb') as pic:
            r = client.statuses.upload(status=u'发布的内容', pic=pic)
        print r.id  # 显示发布成功的微博的编号（即mid）：1234567890123456


Client调用规则：**斜杠（/）映射为点（.）**

====================================== =========================================
            新浪微博API                               调  用
====================================== =========================================
  users/show                           client.users.show()
  statuses/upload                      client.statuses.upload()
  ...                                  ...
====================================== =========================================

更多API请参见：`新浪微博API文档`_

OAuth2使用方法：

.. code-block:: python

        from chinaapi.sina.weibo.open import OAuth2, App


        # 设置App，填上自己的app_key，app_secret；redirect_uri可不填
        app = App('app_key', 'app_secret', 'redirect_uri')

        # 获取授权链接
        oauth2 = OAuth2(app)
        url = oauth2.authorize()  # 如果app中未设置redirect_uri，则此处必须传入
        print url # 显示授权链接（该url用于提供给用户进行登录授权，授权成功后会回调redirect_uri?code=****）

        # 获取Token
        token = oauth2.access_token(code='code')  #  code取自回调地址后所附的code参数
        print token.access_token  # 显示访问令牌
        print token.expires_in  # 显示令牌剩余授权时间的秒数
        print token.expired_at  # 显示令牌到期日期，为timestamp格式

        # 取消授权
        r = oauth2.revoke('access_token')
        print r # 显示是否成功取消

OAuth2调用规则：**斜杠（/）映射为点（.）**

====================================== =========================================
            新浪微博oauth2 API                        调  用
====================================== =========================================
  oauth2/authorize                     oauth2.authorize()
  oauth2/access_token                  oauth2.access_token()
  oauth2/get_token_info                oauth2.get_token_info()
  oauth2/revokeoauth2                  oauth2.revoke()
====================================== =========================================

----

淘宝API:
------


使用示例：

.. code-block:: python

        from chinaapi.taobao.open import Client, App


        # client的设置
        app = App('app_key', 'app_secret')  # 填上自己的app_key，app_secret
        client = Client(app)

        # 获取淘宝客店铺列表，对应的接口是：taobao.tbk.shops.get
        # 返回结果r是json中tbk_shops_get_response的值
        # 所有的接口都直接返回response（键名为：接口+_response后缀）的值
        r = client.tbk.shops.get(cid=14, fields='user_id,seller_nick,shop_title,pic_url')
        print len(r.tbk_shops.tbk_shop)  # 显示店铺列表的数量：40


调用规则：**直接映射（可省略前缀taobao.）**

====================================== =========================================
               淘宝API                               调  用
====================================== =========================================
  taobao.itemcats.get                  client.itemcats.get()
                                       或者 client.taobao.itemcats.get()
  taobao.tbk.shops.get                 client.tbk.shops.get()
                                       或者 client.taobao.tbk.shops.get()

====================================== =========================================

更多API请参见：`淘宝API文档`_

----

腾讯微博API:
--------

使用方法：

.. code-block:: python

        from chinaapi.qq.weibo.open import Client, App


        # client的设置
        app = App('app_key', 'app_secret')  # 填上自己的app_key，app_secret
        client = Client(app, openid='openid')  # 填上取得的openid
        client.set_access_token('access_token')  # 填上取得的access_token

        # 获取当前登录用户的信息，对应的接口是：user/info
        # 返回结果r是json中的data值
        r = client.user.info()
        print r.name  # 显示用户名

        # 发布一条带图片的微博，对应的接口是：t/add_pic
        with open('pic.jpg', 'rb') as pic:
            r = client.t.add_pic(content=u'发布的内容', pic=pic)
        print r.id  # 显示微博的ID

        # 删除一条微博，对应的接口是：t/del
        r = client.t.delete(id=r.id)  # 请将del替换为delete
        print r.id  # 显示微博的ID

        # 有两种设置clientip的方法：
        # 1.全局设置，在该client所发起的所有调用中有效
        client.clientip = '220.181.111.85'
        # 2.临时设置，只在此次调用中有效，会覆盖全局设置
        client.t.upload_pic(pic=pic, pic_type=2, clientip='220.181.111.85')


调用规则：**斜杠（/）映射为点（.），del映射为delete（因del是Python保留字，无法作为方法名）**

====================================== =========================================
            腾讯微博API                               调  用
====================================== =========================================
  user/info                            client.user.info()
  t/add_pic                            client.t.add_pic()
  t/del                                client.t.delete()
====================================== =========================================

更多API请参见：`腾讯微博API文档`_

----

人人API:
------

使用方法：

.. code-block:: python

        from chinaapi.renren.open import Client


        client = Client()
        client.set_access_token('access_token')  # 填上取得的access_token

        # 获取用户信息，对应的接口是：/v2/user/get
        r = client.user.get(userId=334258249)
        print r.name  # 显示用户名

        # 上传照片至用户相册，对应的接口是：/v2/photo/upload
        with open('pic.jpg', 'rb') as pic:
            r = client.photo.upload(file=pic)
        print r.id  # 显示照片的ID


调用规则：**斜杠（/）映射为点（.）**

====================================== =========================================
            人人API                               调  用
====================================== =========================================
  /v2/user/get                         client.user.get()
  /v2/photo/upload                     client.photo.upload()

====================================== =========================================

更多API请参见：`人人API文档`_

----

TODO：
-----

- 添加OAuth2说明

感谢以下Python SDK的开发者们的贡献：
-----------------------

- 新浪微博：`sinaweibopy`_
- 腾讯微博：`tweibo`_
- 淘宝：`taobaopy`_
- 豆瓣：`douban-client`_

.. _`sinaweibopy`: https://github.com/michaelliao/sinaweibopy
.. _`tweibo`: https://github.com/upbit/tweibo-pysdk
.. _`taobaopy`: https://github.com/sempr/taobaopy
.. _`douban-client`: https://github.com/douban/douban-client
.. _`Requests`: https://github.com/kennethreitz/requests
.. _`新浪微博API文档`: http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI
.. _`淘宝API文档`: http://open.taobao.com/doc/category_list.htm?spm=0.0.0.0.MNfatw&id=102
.. _`腾讯微博API文档`: http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3
.. _`人人API文档`: http://wiki.dev.renren.com/wiki/API2


.. :changelog:

Release History
---------------

0.8.6 (2014-03-12)
++++++++++++++++++
- 添加：ApiRequestError
- 移除：InvalidApiError，NotExistApi，MutexApiParametersError

0.8.0 (2014-01-20)
++++++++++++++++++
- 添加新浪微博web登录函数
- 添加人人web登录函数
- 添加搜狐web登录函数
- 添加网易web登录函数

0.7.3 (2014-01-04)
++++++++++++++++++
- 支持重试，默认的重试次数为3次（注：目前只针对淘宝和新浪微博一些特定的异常进行重试）

0.7.1 (2014-01-03)
++++++++++++++++++
- 调整代码架构：将utils中的文件移至根目录
- 移除Response类，使用requests response hook解析响应结果

0.6.7 (2013-12-31)
++++++++++++++++++
- 新浪微博：增加赞操作
- 添加异常类：MutexApiParameters


0.6.5 (2013-12-20)
++++++++++++++++++
- 允许Open Client不传入App参数


0.6.4 (2013-12-20)
++++++++++++++++++
- 添加两个公开的大型新浪微博应用App


0.6.2 (2013-12-14)
++++++++++++++++++
- 调整Token


0.6.0 (2013-12-14)
++++++++++++++++++
- 调整模块架构，分为Open（开放平台）、Web（Web网页）、Wap（手机网页）三种API


0.5.8 (2013-12-13)
++++++++++++++++++
- 支持新浪微博直接登录（直接使用账户密码登录，跳过获取code和回调环节）
- 添加WeicoAndroidApp和WeicoIphoneApp两个App


0.5.7 (2013-12-12)
++++++++++++++++++
- 移除furl
- 更改部分异常类的名称


0.5.6 (2013-12-11)
++++++++++++++++++
- 添加淘宝ApiOAuth2
- 添加ApiResponseValueError


0.5.1 (2013-12-8)
+++++++++++++++++
- 添加豆瓣ApiOAuth2


0.5.0 (2013-12-8)
+++++++++++++++++
- 添加新浪微博、腾讯微博、人人的ApiOAuth2
- 添加淘宝ApiOAuth


0.4.2 (2013-12-7)
+++++++++++++++++
- 移除packages

0.4.0 (2013-12-7)
+++++++++++++++++

- 添加Token，App等models，并添加测试
- 添加ApiClientBase
- 添加ApiError，并添加测试
- 添加新浪微博、腾讯微博、淘宝、人人的ApiClient
- 添加新浪微博、腾讯微博、淘宝、人人的ApiClient本地单元测试（测试成功，因含有帐号信息不上传到Github）


0.3.1 (2013-12-3)
+++++++++++++++++

- 提取共用模块jsonDict，并增加测试


0.3.0 (2013-11-30)
++++++++++++++++++

- 上传到pipy，可通过: pip install chinaapi 进行安装


0.2.0 (2013-11-30)
++++++++++++++++++

**目前已引入的API Python SDK：**

- 新浪微博：https://github.com/michaelliao/sinaweibopy
- 腾讯微博：https://github.com/upbit/tweibo-pysdk
- 淘宝：https://github.com/sempr/taobaopy