微博批量发布,微博定时发布

最新的微博将之前的登录做了修改,使自动登录获取cookie更难,就算获取了有效期也很短,需要长期不断的登录,因此研究了一下,最新的微博登录。

思路:

1.可以使用手机验证码,开放一个安卓短信监控将收到的微博短信验证自动获取,自动验证。

2.微博扫码也是可以。

放一个18年的微博模拟登录交流交流,如果需要最新的可以私信联系我,需要现成的微博运营工具也可以加我微信zhejizhao

class Weibo(object):

def __init__(self, username="", passwd="", pin_path="./pin.png", proxy=False):
        self.r = requests.Session()
        if proxy:
            self.r.proxies={
                'http': 'socks5://127.0.0.1:1080',
                'https': 'socks5://127.0.0.1:1080',
            }
        self.username = username
        self.passwd = str(passwd)
        self.pin_path = pin_path
        self.weibo_url = 'http://weibo.com/'
        self.prelogin_url = 'https://login.sina.com.cn/sso/prelogin.php'
        self.login_url = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)'
        self.headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
                }

def login(self):
        if not self._prelogin():
            logger.warning('user:%s prelogin err' % self.username)
            return None

self.sp = self._getPwd()
        para = {
            "encoding": "UTF-8",
            "entry": "weibo",
            "from": "",
            "gateway": 1,
            "nonce": self.nonce,
            "pagerefer": "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)",
            "prelt": 117,
            "pwencode": "rsa2",
            "returntype": "TEXT",
            "rsakv": self.rsakv,
            "savestate": 0,
            "servertime": self.servertime,
            "service": "miniblog",
            "sp": self.sp,
            "sr": "1920*1080",
            "su": self.su,
            
            "useticket": 1,
            "vsnf": 1,
        }
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
            'Accept - Encoding': 'gzip, deflate',
            'Accept - Language': 'zh-CN,zh;q=0.9',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Referer': 'https://login.sina.com.cn/signup/signin.php?entry=sso',
            
            'Host': 'login.sina.com.cn'
            
            }

if self.showpin == 1:
            print('验证码')
            logger.debug('user:%s 需要验证码' % self.username)
            para['door'] = self._getPin()
            print(para['door'])
            para['cdult'] = 2
            para['pcid'] = self.pcid
            para['prelt'] = 2041
        time.sleep(4)
        for try_times in range(2): 
            data = self.r.post(self.login_url, data=para, headers=headers)
            print(data.status_code)
            if data.status_code != 200:
                print('错误1')
                continue
            else:
                break

data = json.loads(data.text)
    
        if data['retcode'] != "0":
            logger.warning('user:%s retcode err:%s' % (
                self.username, json.dumps(data, ensure_ascii=False)))
            return None

self.ticket = data['ticket']
        para={
            'callback':'sinaSSOController.callbackLoginStatus',
            'ticket': self.ticket,
            'client': 'ssologin.js(v1.4.18)',
            'retcode': 0,
            'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com'
        }
        time.sleep(5)

ret = self.r.post('http://passport.weibo.com/wbsso/login', params=para, headers=self.headers)
        if ret.status_code != 200:
            print('错误2')
            return None

#if self._is_account_exception():
         #   return None

cookies = self.r.cookies.get_dict()
        cookies = str(cookies).replace(':', '=').replace(',', ';').replace('\'', '').replace('= ', '=')
        print(cookies[1:-1])
        return cookies[1:-1]

def _is_account_exception(self):
        time.sleep(0.5)
        ret = self.r.post(self.weibo_url, headers=self.headers)

if ret.text.find('账号存在异常') != -1:
            logger.warning('user:%s exception' % self.username)
            return True

if ret.status_code != 200:
            logger.warning('user:%s exception' % self.username)
            return True
        else:
            logger.info('user:%s login ok' % self.username)
            return False

def _prelogin(self):

param = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
            'Accept - Encoding': 'gzip, deflate',
            'Accept - Language': 'zh-CN,zh;q=0.9',
            'Connection': 'keep-alive',
            'Host': 'weibo.com',
            'Upgrade-Insecure-Requests:':1,
        
        }
        ret = self.r.get(self.weibo_url,headers=self.headers,params=param)
    
        if ret.status_code != 200:
            return False

self.su = self._getSu()
        para = {
            "_": time.time(),
            "callback": "sinaSSOController.preloginCallBack",
            "checkpin": 1,
            "client": "ssologin.js(v1.4.18)",
            "entry": "weibo",
            "rsakt": "mod",
            "su": self.su
        }
        ret = self.r.post(self.prelogin_url, params=para, headers=self.headers)
    
        if ret.status_code != 200:
            return False

d = ret.text
        datas = re.findall(r'preloginCallBack\(([\w\W]+?)\)', d)
        if not datas:
            return False

data = datas[0]
        data = json.loads(data)
        self.servertime = str(data.get('servertime',''))
        self.nonce = str(data.get('nonce', ''))
        self.pubkey = data.get('pubkey', '')
        self.rsakv = data.get('rsakv', '')
        self.showpin = data.get('showpin', 0)
        self.pcid = data.get('pcid', '')
        
        logger.info('user:%s prelogin ok' % self.username)
        return True

def _getSu(self):
        '''
        获取加密用户名: 只有 Base64
        '''
        return  base64.encodestring(self.username)[:-1]

def _getPwd(self):
        '''
        获取加密密码sp
        '''
        rsaPubkey = int(self.pubkey, 16)
        RSAKey = rsa.PublicKey(rsaPubkey, 65537) #创建公钥
        codeStr = self.servertime +'\t'+ self.nonce +'\n'+ self.passwd
        pwd = rsa.encrypt(codeStr, RSAKey)  #使用rsa进行加密
        return binascii.b2a_hex(pwd) #将加密信息转换为16进制。
    
    
    def _getPin(self):
        '''
        验证码
        '''
        para = {
            'p': self.pcid,
            'r': random.randint(10000,100000),
            's': 0
        }

pic = self.r.post('http://login.sina.com.cn/cgi/pin.php', params=para, headers=self.headers)
    return fateadm_api.TestFunc(pic.content)

微博批量发布,微博定时发布,批量删除,批量评论等功能的实现相关推荐

  1. 2023年最新批量删除微博_新版微博怎么批量删除自己发的微博?

    2023批量删除微博插件小工具_微博如何一次性批量删除微博 一千多条微博怎么删?微博怎么批量删除_怎样把发的微博全删了 视频如下 2022最新批量删除微博丨怎么一键批量删除微博与删除关注? 目前微博不 ...

  2. wordpress自动批量定时发布插件 DX-auto-publish

    DX-auto-publish是一款wordpress自动发布插件,方便实用. 该wordpress插件的主要功能如下: 1.能够自动批量定时发布wordpress站点的草稿文章,无需每篇文章都手动设 ...

  3. 批量删微博丨2023简易版本控制台批量删除微博代码

    批量删微博丨简易版批量删除微博方法 微博点击头像到全是自己微博动态的个人主页 复制以下内容到浏览器控制台回车执行 function deleteMessage() {// 下箭头let iDom = ...

  4. HBase项目之谷粒微博:创建命名空间,微博内容表,用户关系表,微博收件箱表,发布微博内容,添加关注用户,移除(取关)用户,获取关注的人的微博内容,HBase实战项目

    Hbase实战之谷粒微博 1 需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 2 代码实现 2.1 代码设计总览: 1) 创建命名空 ...

  5. 微博HTML怎么改,微博发布后可以修改吗 已发布微博怎么重新编辑

    12月12日,微博正式上线了编辑功能,可对已发布的微博内容进行编辑修改.一般微博在发布后,发现内容中有瑕疵或纰漏,但此时微博已经积累了部分阅读和互动,删除重发的成本比较高.加入修改功能后,降低修改成本 ...

  6. php mysql redis mq_PHP基于Redis消息队列实现发布微博的方法

    本文实例讲述了PHP基于Redis消息队列实现发布微博的方法.分享给大家供大家参考,具体如下: phpRedisAdmin :github地址  图形化管理界面 git clone [url]http ...

  7. 微博群发私信 php,用PHP基于Redis消息队列实现发布微博的方法

    用PHP基于Redis消息队列实现发布微博的方法 PHP基于Redis消息队列实现发布微博的方法,结合实例形式分析了php+redis数据库的安装.连接.读取.插入等相关操作技巧,需要的朋友可以参考下 ...

  8. php表单数据提交到本业,PHP_PHP+Mysql+jQuery实现发布微博程序 php篇,先还是要说明本例的业务流程 - phpStudy...

    PHP+Mysql+jQuery实现发布微博程序 php篇 先还是要说明本例的业务流程: 1.前端用户输入内容,并对输入的内容字数进行实时统计. 2.用户提交数据,jQuery实现通过Ajax向后台发 ...

  9. 如何将微博全景图下载到手机发布至QQ

    如何将微博全景图下载到手机发布至QQ #第一步:获取图片 在电脑端用浏览器进入微博官方首页,打开搜索,搜索全景图,找到后可以看见一个链接,点击链接进入网页,如图1 #2,复制图片的地址. 2 保存到本 ...

  10. php curl发布微博,php curl利用嘀咕、搜狐微博API发布微博

    嘀咕.搜狐微博API使用昨晚简单地研究了一下,下面是用php curl利用嘀咕.搜狐微博API发布微博,具体如下: $username = 'xieyanwei51'; $password = '12 ...

最新文章

  1. 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能
  2. a和a数值大小 计算机,Java求s=a+aa+aaa+aaaa+aa...a的值
  3. 研究速递:预测学习——神经元高效运作的最佳策略
  4. 北斗导航 | NED(北东地)转ECEF(地心地固)或ECEF转NED(Matlab源代码)
  5. [剑指offer]面试题22:栈的压入、弹出序列
  6. marlin 三角洲_带火花的三角洲湖:什么和为什么?
  7. 对于移动类型Z17和帐户64020100 物料号 (009)的不同的字段选择(公司间调拨)
  8. erdas裁剪影像_运用ERDAS裁剪影像
  9. mysql字符串区分大小写的问题
  10. 二分求浮点数的平方根
  11. socket通信相关知识
  12. Mac如何彻底卸载Mysql
  13. 黑苹果xxx.efi格式文件介绍
  14. 11-新闻发布系统数据库-新闻数据操作
  15. 树莓派4b自带wifi_树莓派4B(ubuntu)无线网络配置
  16. 通过温度湿度计算露点
  17. 电脑IE图标删不掉怎么办
  18. Matlab/Simulink仿真问题及技巧汇总【持续更新】
  19. iThenticate查重系统的使用及如何去除参考文献
  20. 致远互联:以数智化指引破局之道

热门文章

  1. ADMM算法(交替方向乘子法)
  2. 如何将PDF每2页合并成横版的一页
  3. 浅谈前端面向对象oop思想
  4. 学习chirp信号笔记
  5. 【数学逻辑思维】A 好玩的数独游戏——002
  6. Vue将汉字转为拼音,取出首字母
  7. VBA 函数 过程之间互相调用的技巧
  8. 前端开发【WEUI框架】移动端H5页面开发
  9. 基于Kinetis系列微控制器K60芯片的I2C接口函数程序说明1
  10. 【Luat-air105】8.1 camera拍照