在上一篇文章中,已经实现了模拟pastebin.com的账号登录,并且获取了api_dev_key,这一篇文章主要讲一下调用API创建paste

登录之后,进入API页面,发现网站已经提供了几个API接口供调用

在创建paste之前,需要创建一个api_user_key,将得到的api_user_key作为创建paste API的提交数据。

这里给出实现整个任务的代码:

  1. import requests
  2. from lxml import etree
  3.  
  4. class PasteBin(object):
  5. def __init__(self, username, password):
  6. self.username = username
  7. self.password = password
  8.  
  9. def login(self):
  10. login_url = "https://pastebin.com/login"
  11. self.session = requests.Session()
  12. form_data = {
  13. "submit_hidden": "submit_hidden",
  14. "user_name": self.username,
  15. "user_password": self.password,
  16. "submit": "Login"
  17. }
  18. headers = {"content-type": "application/x-www-form-urlencoded"}
  19. res = self.session.post(login_url, data=form_data, headers=headers)
  20. if res.status_code != 200:
  21. raise Exception("login fail")
  22. # 获取api_dev_key
  23. self.api_dev_key = self.get_api_dev_key()
  24.  
  25. def get_api_dev_key(self):
  26. api_url = "https://pastebin.com/api"
  27. text = self.session.get(api_url).content.decode("utf-8")
  28. html = etree.HTML(text)
  29. target_divs = html.xpath('//*[@id="content_left"]/div[9]/div/text()')
  30. if target_divs:
  31. api_dev_key = target_divs[0]
  32. print("api_dev_key:", api_dev_key)
  33. else:
  34. raise Exception("cannot find api_dev_key")
  35. return api_dev_key
  36.  
  37. def get_api_user_key(self):
  38. url = "https://pastebin.com/api/api_login.php"
  39. post_data = {
  40. "api_dev_key": self.api_dev_key,
  41. "api_user_name": self.username,
  42. "api_user_password": self.password
  43. }
  44. r = requests.post(url, data=post_data)
  45. if r.status_code != 200:
  46. raise Exception("get api_user_key fail")
  47. return r.text
  48.  
  49. def create_paste(self, paste_name, paste_code):
  50. api_user_key = self.get_api_user_key()
  51. create_paste_url = "https://pastebin.com/api/api_post.php"
  52. post_data1 = {"api_dev_key": self.api_dev_key,
  53. "api_option": "paste",
  54. "api_paste_code": paste_code,
  55. "api_paste_name": paste_name,
  56. "api_user_key": api_user_key,
  57. "api_paste_private": 2}
  58. r = requests.post(create_paste_url, data=post_data1)
  59. if r.status_code != 200:
  60. raise Exception("create paste fail")
  61. else:
  62. print("create paste succeed")
  63.  
  64. if __name__ == "__main__":
  65. username = "kuang123321"
  66. password = "xxxxxx"
  67. p = PasteBin(username, password)
  68. p.login()
  69. p.create_paste("by code1", "This is a code test")

利用Python调用pastebin.com API自动创建paste的更多相关文章

  1. python调用openstack的api,create_instance的程序解析

    python调用openstack的api,create_instance的程序解析 2017年10月17日 15:27:24 CloudXli 阅读数:848   版权声明:本文为博主原创文章,未经 ...

  2. Python 调用图像融合API

    Python 调用图像融合API 本文记录使用Python,调用腾讯AI开放平台的图像融合API.官网给出的Demo用的是PHP,博主作为Python的粉丝,自然想用它来和『最好的』的语言一较高下,顺 ...

  3. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  4. python 调用github的api,呈现python的受欢迎的程度

    1 使用api调用数据: 在浏览器的地址栏中输入: https://api.github.com/search/repositories?q=language:python&sort=star ...

  5. Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  6. Python 调用阿里云 API 收集 ECS 数据

    #!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2. ...

  7. Python调用百度地图API实现批量经纬度转换为实际省市地点(api调用,json解析,excel读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:http://lbsyun.baidu.com/apiconsole/key?applicatio ...

  8. Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口

    WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...

  9. PYTHON调用JENKINS的API来进行CI

    我查到的相关API有两套,我主要用的是python-jenkins. https://pypi.python.org/pypi/python-jenkins/ 按语法调用即可... import je ...

随机推荐

  1. Java并发编程艺术读书笔记

    1.多线程在CPU切换过程中,由于需要保存线程之前状态和加载新线程状态,成为上下文切换,上下文切换会造成消耗系统内存.所以,可合理控制线程数量. 如何控制: (1)使用ps -ef|grep appn ...

  2. Oracle EBS如何查找到说明性弹性域Title

    Oracle EBS如何查找到说明性弹性域Title 一.方法一:直接在弹性栏位界面查询 在EBS中,有部分表已经启用说明性弹性域,我们可以直接在界面得到弹性域对话框的标题,如下图所示,在OM-事务处 ...

  3. [视频教程] 包管理器方式安装使用openresty新手上路

    OpenResty是一个通过Lua扩展Nginx实现的可伸缩的Web平台,内部集成了大量精良的Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态Web应用.Web ...

  4. kafka相关操作

    kafka安装 下载 wget http://apache.gree.com/apache/kafka/1.0.2/kafka_2.11-1.0.2.tgz tar -zxvf kafka_2.11- ...

  5. show()和隐藏hide() slideDown()和 slideUp() fadeIn()和fadeOut()

    1==>显示show()和隐藏hide() 是一组动画 与切换toggle()$("div").show():当不传递参数时,没有动画效果,它将某个元素瞬间显示出来 $(&q ...

  6. 2017年蓝桥杯B组C/C++决赛题解

    2017年蓝桥杯B组C/C++决赛题目(不含答案) 1.36进制 ok 求36进制,类比二进制转10进制,36^3 + 36^2 + 36^1 + 36^0 2.磁砖样式 ok dfs搜索 我自己写的 ...

  7. c# WF 第7节 对控件的基本操作

    本节内容: 1:修改控件的大小 2:控件的顺序 3:控件的对齐 4:移动button实例 1: 修改控件的大小 第一种: 第二种 : 一次操作多个控件: 选择一个控件.按住ctrl -- 再选择一个控 ...

  8. js 三种存储方式的区别

    javaScript有三种数据存储方式,分别是: sessionStorage localStorage cookie 相同点:都保存在浏览器端,同源的 不同点: ①传递方式不同 cookie数据始终 ...

  9. 《Java多线程设计模式》学习

    还是别人的笔记比较详细: https://segmentfault.com/blog/ressmix_multithread?page=3 mark.

  10. CSP-J&S2019前颓废记

    说了是颓废记,就是颓废记,因为真的很颓废...... 2018年12月 我看懂了<啊哈算法>(仅仅是看懂,并没有完全学会,只看得懂,却不会敲) 插曲:八上期末考试 我们老师阻挠我继续学OI ...