{ "info": { "author": "Yufu Luo", "author_email": "fisherman.luo@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython" ], "description": "\n************\nPenguinSDK(\u817e\u8baf\u5185\u5bb9\u5f00\u653e\u5e73\u53f0SDK)\n************\n\n.. image:: https://travis-ci.org/Luoyufu/penguinSDK.svg?branch=master\n :target: https://travis-ci.org/Luoyufu/penguinSDK\n\n.. image:: https://codecov.io/gh/Luoyufu/penguinSDK/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/Luoyufu/penguinSDK\n\n.. image:: https://img.shields.io/pypi/v/penguinSDK.svg\n :target: https://pypi.python.org/pypi/penguinSDK\n\n.. image:: https://img.shields.io/pypi/pyversions/penguinSDK.svg\n :target: https://pypi.python.org/pypi/penguinSDK\n\n\n`\u817e\u8baf\u5185\u5bb9\u5f00\u653e\u5e73\u53f0API `_ \u7684Python SDK\u3002\n\n\u6982\u8ff0\n========\nPenguinSDK\u5b9e\u73b0\u4e86\u817e\u8baf\u5185\u5bb9\u5f00\u653e\u5e73\u53f0\u7684\u5168\u90e8API\uff1a\n\n* \u6388\u6743/oauth API\n* \u7b2c\u4e09\u65b9\u670d\u52a1API\n* \u5185\u5bb9\u7f51\u7ad9API\n\nSDK\u57fa\u4e8e\u58f0\u660e\u5f0fAPI\u6846\u67b6 `doclink `_ \u5b9e\u73b0\n\n\u4f7f\u7528\n====\n\u5185\u5bb9\u7f51\u7ad9API\n--------\n* \u83b7\u53d6credential(\u6388\u6743\u51ed\u8bc1)\n.. code-block:: python\n\n from penguinsdk import Penguin\n\n\n penguin = Penguin('client_id', 'client_secret')\n penguin.build_content_site_credential()\n\n >>> print(penguin.credential)\n access_token:\n openid:\n refresh_token:None\n client_id:\n expiry:1520766527\n\n* \u901a\u8fc7access_token\u6784\u5efacredential\n.. code-block:: python\n\n penguin = Penguin('client_id', 'client_secret')\n penguin.build_content_site_credential(access_token='access_token')\n\n >>> print(penguin.credential)\n access_token:access_token\n openid:None\n refresh_token:None\n client_id:client_id\n expiry:None\n\n* \u8c03\u7528API\ncredential\u6784\u5efa\u597d\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7Penguin\u5bf9\u8c61\u8c03\u7528\u5185\u5bb9\u7f51\u7ad9API\n.. code-block:: python\n\n penguin = Penguin('client_id', 'client_secret')\n penguin.build_content_site_credential()\n\n media_info = penguin.media_info() # \u83b7\u53d6\u81ea\u5a92\u4f53\u57fa\u672c\u4fe1\u606f\n\n >>> print(media_info)\n {'nick': '\u9752\u94dc\u5473', 'header': 'http://inews.gtimg.com/newsapp_ls/0/2720632941_200200/0'}\n\n\u7b2c\u4e09\u65b9\u670d\u52a1\n-----\n\n\u7b2c\u4e09\u65b9\u670d\u52a1\u9700\u8981\u901a\u8fc7oauth2\u534f\u8bae\u83b7\u53d6\u7528\u6237\u8bb8\u53ef\n\n* oauth\u6d41\u7a0b\uff1aoauth_flow\n\n1. \u83b7\u53d6\u6388\u6743\u9875\u5730\u5740\n\n.. code-block:: python\n\n from penguinsdk import Penguin\n\n penguin = Penguin('client_id', 'client_secret')\n oauth2_flow = penguin.oauth2_flow\n authorization_url = oauth2_flow.get_authorization_url(redirect_uri='redirect_uri', state='state')\n\n >>> print(authorization_url)\n 'https://auth.om.qq.com/omoauth2/authorize?response_type=code&client_id=client_id&redirect_uri=redirect_uri&state=state'\n\n2. \u5ba2\u6237\u7aef\u5728\u4e0a\u4e00\u6b65\u7684\u6388\u6743\u5730\u5740\u83b7\u5f97\u7528\u6237\u6388\u6743\uff0c\u5c06\u5411redirect_uri\u56de\u8c03\u6388\u6743\u7801code\n\n3. \u901a\u8fc7code\u4ea4\u6362access_token\u5e76\u83b7\u5f97credential\u5b9e\u4f8b\u3002credential\u4e2d\u5305\u542baccess_token, refresh_token, openid, expiry\u53ef\u4ee5\u4fdd\u5b58\u4e0b\u6765\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002\n\n.. code-block:: python\n\n penguin = Penguin('client_id', 'client_secret')\n\n code = 'auth_code'\n penguin.build_3rd_party_credential(code)\n\n >>> print(penguin.credential)\n access_token:\n openid:\n refresh_token:\n client_id:\n expiry:1520766527\n\n4. \u901a\u8fc7\u5df2\u6709\u6388\u6743\u4fe1\u606f\u6784\u5efacredentials\n\n.. code-block:: python\n\n penguin = Penguin('client_id', 'client_secret')\n penguin.build_3rd_party_credential(\n access_token='access_token',\n refresh_token='refresh_token',\n openid='openid',\n expiry=1520766527)\n\n >>> print(penguin.credential)\n access_token:'access_token'\n openid:'openid'\n refresh_token:'refresh_token'\n client_id:'client_id'\n expiry:1520766527\n\n5. \u8c03\u7528API\n\ncredential\u6784\u5efa\u597d\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7Penguin\u5bf9\u8c61\u8c03\u7528\u7b2c\u4e09\u65b9\u670d\u52a1\u7684API\n\n.. code-block:: python\n\n penguin = Penguin('client_id', 'client_secret')\n penguin.build_3rd_party_credential(\n access_token='access_token',\n refresh_token='refresh_token',\n openid='openid',\n expiry=1520766527)\n\n penguin.media_info()\n\n >>> print(media_info)\n {'nick': '\u9752\u94dc\u5473', 'header': 'http://inews.gtimg.com/newsapp_ls/0/2720632941_200200/0'}\n\nAPI\u6c47\u603b\n=====\n\u5185\u5bb9\u7f51\u7ad9API\n-------\n\n\u8c03\u7528\u65f6\uff0cpenguin\u5c06\u81ea\u52a8\u4f20\u5165access_token, \u5176\u4f59\u53c2\u6570\u901a\u8fc7\u547d\u540d\u53c2\u6570\u65b9\u5f0f\u4f20\u5165\n\n.. code-block:: python\n\n from doclink import Consumer\n from ..endpoints import api_content_site as endpoints\n from .. import utils\n\n consumer = Consumer(\n endpoints.base_uri,\n expected_status_code=200)\n consumer.resp_hook(utils.preprocess_resp)\n\n\n @consumer.get(endpoints.media_info)\n def media_info(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.transaction_info)\n def transaction_info(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - transaction_id\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.article_list)\n def article_list(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - page\n - limit: 10\n \n \"\"\"\n\n\n @consumer.post(endpoints.publish_live)\n def publish_live(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - title\n - start_time\n - end_time\n - cover_pic\n - rtmp_url\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.publish_article)\n def publish_article(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - title\n - content\n - cover_pic\n - apply:\n required: False\n - original_platform:\n required: False\n - original_url:\n required: False\n - original_author:\n required: False\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.publish_video)\n def publish_video(resp):\n \"\"\"Upload a video and publish it.\n\n \n args:\n query:\n - access_token\n - title\n - tags\n - cat\n - md5\n - desc\n - apply:\n required: False\n multipart: media\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.apply_for_video_upload)\n def apply_for_video_upload(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - size\n - md5\n - sha\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.upload_video_chunk)\n def upload_video_chunk(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - transaction_id\n - start_offset: 0\n file: mediatrunk\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.post(endpoints.publish_uploaded_video)\n def publish_uploaded_video(resp):\n \"\"\"Publish a uploaded video.\n\n Vid is pointted to the uploaded vidoe.\n\n \n args:\n query:\n - access_token\n - title\n - tags\n - cat\n - desc\n - apply:\n required: False\n - vid\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.upload_video_thumbnail)\n def upload_video_thumbnail(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - md5\n - vid\n file: media\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.get(endpoints.media_stats)\n def media_stats(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.media_daily_stats)\n def media_daily_stats(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - begin_date:\n required: False\n - end_date:\n required: False\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.article_stats)\n def article_stats(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - article_id\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.article_daily_stats)\n def article_daily_stats(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - article_id\n - begin_date:\n required: False\n - end_date:\n required: False\n \n \"\"\"\n return resp.json_['data']\n\n\u7b2c\u4e09\u65b9\u670d\u52a1API\n--------\n\n\u8c03\u7528\u65f6\uff0cpenguin\u5c06\u81ea\u52a8\u4f20\u5165access_token\u548copenid, \u5176\u4f59\u53c2\u6570\u901a\u8fc7\u547d\u540d\u53c2\u6570\u65b9\u5f0f\u4f20\u5165\n\n.. code-block:: python\n\n from doclink import Consumer\n from ..endpoints import api_3rd_party as endpoints\n from .. import utils\n\n consumer = Consumer(\n endpoints.base_uri,\n expected_status_code=200)\n consumer.resp_hook(utils.preprocess_resp)\n\n\n @consumer.get(endpoints.media_info)\n def media_info(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.transaction_info)\n def transaction_info(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - transaction_id\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.get(endpoints.article_list)\n def article_list(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - page\n - limit: 10\n \n \"\"\"\n\n\n @consumer.post(endpoints.publish_live)\n def publish_live(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - title\n - start_time\n - end_time\n - cover_pic\n - rtmp_url\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.publish_article)\n def publish_article(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - title\n - content\n - cover_pic\n - apply:\n required: False\n - original_platform:\n required: False\n - original_url:\n required: False\n - original_author:\n required: False\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.publish_video)\n def publish_video(resp):\n \"\"\"Upload a video and publish it.\n\n \n args:\n query:\n - access_token\n - openid\n - title\n - tags\n - cat\n - md5\n - desc: ''\n - apply:\n required: False\n multipart: media\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.apply_for_video_upload)\n def apply_for_video_upload(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - size\n - md5\n - sha\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.upload_video_chunk)\n def upload_video_chunk(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - transaction_id\n - start_offset: 0\n file: mediatrunk\n \n \"\"\"\n return resp.json_['data']\n\n\n @consumer.post(endpoints.publish_uploaded_video)\n def publish_uploaded_video(resp):\n \"\"\"Publish a uploaded video.\n\n Vid is pointted to the uploaded vidoe.\n\n \n args:\n query:\n - access_token\n - openid\n - title\n - tags\n - cat\n - desc\n - apply:\n required: False\n - vid\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n @consumer.post(endpoints.upload_video_thumbnail)\n def upload_video_thumbnail(resp):\n \"\"\"\n \n args:\n query:\n - access_token\n - openid\n - md5\n - vid\n file: media\n \n \"\"\"\n return resp.json_['data']['transaction_id']\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "penguinSDK", "package_url": "https://pypi.org/project/penguinSDK/", "platform": "", "project_url": "https://pypi.org/project/penguinSDK/", "project_urls": null, "release_url": "https://pypi.org/project/penguinSDK/1.0.2/", "requires_dist": [ "doclink (>=1.0.7)" ], "requires_python": "", "summary": "python sdk to query API from penguin(\u817e\u8baf\u5185\u5bb9\u5f00\u653e\u5e73\u53f0)", "version": "1.0.2" }, "last_serial": 3660557, "releases": { "1.0.2": [ { "comment_text": "", "digests": { "md5": "02cbf4aa6f1426984bf09bd6a156eb8c", "sha256": "c0609e32f34d6a6e9d924ff7bd636a369a132f38642d34c6f3c9a911162d8fd6" }, "downloads": -1, "filename": "penguinSDK-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02cbf4aa6f1426984bf09bd6a156eb8c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21224, "upload_time": "2018-03-12T07:05:28", "url": "https://files.pythonhosted.org/packages/53/db/57e60b64844606521ae8f316215747bec6bc0f74717f54ce3d106a4ee235/penguinSDK-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fab7ffff639224471b8be43c293c5869", "sha256": "fdeb9a4ce8514f16323cbac2b927fdfc07201813f7d50cae9d5ce2cf3486cd18" }, "downloads": -1, "filename": "penguinSDK-1.0.2.tar.gz", "has_sig": false, "md5_digest": "fab7ffff639224471b8be43c293c5869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16534, "upload_time": "2018-03-12T07:05:29", "url": "https://files.pythonhosted.org/packages/2b/59/0bafaed694c20d962f8595d8505e4262b98b26eb8c620397f02c6b791958/penguinSDK-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "02cbf4aa6f1426984bf09bd6a156eb8c", "sha256": "c0609e32f34d6a6e9d924ff7bd636a369a132f38642d34c6f3c9a911162d8fd6" }, "downloads": -1, "filename": "penguinSDK-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "02cbf4aa6f1426984bf09bd6a156eb8c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21224, "upload_time": "2018-03-12T07:05:28", "url": "https://files.pythonhosted.org/packages/53/db/57e60b64844606521ae8f316215747bec6bc0f74717f54ce3d106a4ee235/penguinSDK-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fab7ffff639224471b8be43c293c5869", "sha256": "fdeb9a4ce8514f16323cbac2b927fdfc07201813f7d50cae9d5ce2cf3486cd18" }, "downloads": -1, "filename": "penguinSDK-1.0.2.tar.gz", "has_sig": false, "md5_digest": "fab7ffff639224471b8be43c293c5869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16534, "upload_time": "2018-03-12T07:05:29", "url": "https://files.pythonhosted.org/packages/2b/59/0bafaed694c20d962f8595d8505e4262b98b26eb8c620397f02c6b791958/penguinSDK-1.0.2.tar.gz" } ] }