zoukankan      html  css  js  c++  java
  • 利用Python调用pastebin.com API自动创建paste

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

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

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

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

    import requests
    from lxml import etree
    
    class PasteBin(object):
        def __init__(self, username, password):
            self.username = username
            self.password = password
    
        def login(self):
            login_url = "https://pastebin.com/login"
            self.session = requests.Session()
            form_data = {
                "submit_hidden": "submit_hidden",
                "user_name": self.username,
                "user_password": self.password,
                "submit": "Login"
            }
            headers = {"content-type": "application/x-www-form-urlencoded"}
            res = self.session.post(login_url, data=form_data, headers=headers)
            if res.status_code != 200:
                raise Exception("login fail")
            # 获取api_dev_key
            self.api_dev_key = self.get_api_dev_key()
    
        def get_api_dev_key(self):
            api_url = "https://pastebin.com/api"
            text = self.session.get(api_url).content.decode("utf-8")
            html = etree.HTML(text)
            target_divs = html.xpath('//*[@id="content_left"]/div[9]/div/text()')
            if target_divs:
                api_dev_key = target_divs[0]
                print("api_dev_key:", api_dev_key)
            else:
                raise Exception("cannot find api_dev_key")
            return api_dev_key
    
        def get_api_user_key(self):
            url = "https://pastebin.com/api/api_login.php"
            post_data = {
                "api_dev_key": self.api_dev_key,
                "api_user_name": self.username,
                "api_user_password": self.password
            }
            r = requests.post(url, data=post_data)
            if r.status_code != 200:
                raise Exception("get api_user_key fail")
            return r.text
    
        def create_paste(self, paste_name, paste_code):
            api_user_key = self.get_api_user_key()
            create_paste_url = "https://pastebin.com/api/api_post.php"
            post_data1 = {"api_dev_key": self.api_dev_key,
                          "api_option": "paste",
                          "api_paste_code": paste_code,
                          "api_paste_name": paste_name,
                          "api_user_key": api_user_key,
                          "api_paste_private": 2}
            r = requests.post(create_paste_url, data=post_data1)
            if r.status_code != 200:
                raise Exception("create paste fail")
            else:
                print("create paste succeed")
    
    if __name__ == "__main__":
        username = "kuang123321"
        password = "xxxxxx"
        p = PasteBin(username, password)
        p.login()
        p.create_paste("by code1", "This is a code test")
  • 相关阅读:
    windows7 端口查看以及杀死进程释放端口
    字符设备驱动模块与测试代码编写。
    c++项目范例
    较复杂makefile跟lds脚本程序的编写
    S5PV210时钟,看门狗定时器
    S5PV210中断处理
    arm 异常处理结构
    arm指令系统
    arm体系结构
    s5pv210 的启动
  • 原文地址:https://www.cnblogs.com/legend-123/p/11175613.html
Copyright © 2011-2022 走看看