当前位置: 首页 > 后端技术 > Python

随便玩,要不要试试大声吼发微博

时间:2023-03-26 01:10:29 Python

原文链接随便玩,要不要大声吼发微博试试mp.weixin.qq.com看效果展示:https://zhuanlan.zhihu.com/p/...介绍好多天没写推文了,出来泡吧。听说很多朋友因为疫情在家都快憋死了。一起对着电脑发泄如何?吼到自动发微博庆祝?废话不多说,愉快的开始吧~原理介绍既然要实现自动发微博,自然要先实现微博的模拟登录。这里还是使用开源的模拟登录包DecryptLogin来实现:'''使用DecryptLogin模拟登录'''@staticmethoddeflogin(username,password):lg=login.Login()infos_return,session=lg.weibo(username,password,'pc')returninfos_return.get('nick'),infos_return.get('uid'),session接下来我们新建一个文件夹(比如weibo),把我们需要发送的东西放到这个文件夹里微博内容:weibo文件夹内容如下:我们微博的图片放在pictures文件夹:http://weixin.qq.com/r/Pi-y6qjEqPXXreyJ93os(二维码自动识别)weibo。在md中写入我们微博的文本内容:写一个函数自动解析上面的微博内容:'''分析待发送的微博内容'''def__parseWeibo(self,weibopath):text=open(os.path.join(weibopath,'weibo.md'),'r',encoding='utf-8').read()图片=[]forfilenameinsorted(os.listdir(os.path.join(weibopath,'pictures'))):iffilename.split('.')[-1].lower()in['jpg','png']:pictures.append(open(os.path.join(weibopath,'pictures',filename),'rb').read())iflen(pictures)>9:print('[警告]:一条微博最多只能有9张图片,程序现在会自动删除多余的图片')pictures=pictures[:9]返回文字、图片这个函数可以根据传入的微博文件夹Path(比如我们刚刚在当前目录下新建了一个名为weibo的文件夹,那么可以传入./weibo)来自动解析要发送的微博内容(文字+图片)。微博内容解析成功后,进入我们的亮点是对着电脑喊一声自动发微博。原理其实很简单,就是利用python的pyaudio包检测当前电脑麦克风输入的音量大小,当音量足够大时(需要在30s内达到设置的最小音量),会自动发出刚才的微博:#确定是微博print('微博内容为:%s\n图片数量为:%s'%(text,len(pictures)))print('如果确认发这条微博请在30秒内对着电脑喊')stream=pyaudio.PyAudio().open(format=pyaudio.paInt16,channels=1,rate=int(pyaudio.PyAudio().get_device_info_by_index(0)['defaultSampleRate']),input=True,frames_per_buffer=1024)is_send_flag=Falsestart_t=time.time()whileTrue:time.sleep(0.1)audio_data=stream.read(1024)k=max(struct.unpack('1024h',audio_data))#--声音够大,发这条微博ifk>8000:is_send_flag=Truebreak#--时间到了,声音不够大,不发这条微博if(吨ime.time()-start_t)>30:break#发送微博ifis_send_flag:print('成功!准备开始发这条微博了~')ifself.__sendWeibo(text,pictures):print('[INFO]:微博博文发送成功!')可能有小伙伴会问,为什么会自动发微博呢?与在线教程相同您要注册SDK吗?当然不行,注册SDK好麻烦(经常注册失败T_T)试试发微博抓包:我们很容易发现这个接口是用来上传图片的:这个接口是用来发微博的:所以我们可以很方便的写自动发微博博客的功能来自:'''发送微博'''def__sendWeibo(self,text,pictures):#上传图片pic_id=[]url='https://picupload.weibo.com/interface/pic_upload.php'params={'data':'1','p':'1','url':'weibo.com/u/%s'%self.uid,'markpos':'1','logo':'1','nick':'@%s'%self.nickname,'marks':'1','app':'miniblog','s':'json','pri':'null','file_source':'1'}for画中画:res=self.session.post(url,headers=self.headers,params=params,data=picture)res_json=res.json()ifres_json['code']=='A00006':pid=res_json['data']['pics']['pic_1']['pid']pic_id.append(pid)time.sleep(random.random()+0.5)#发送微博url='https://www.weibo.com/aj/mblog/add?ajwvr=6&__rnd=%d'%int(time.time()*1000)data={'title':'','location':'v6_content_home','text':文本,'appkey':'','style_type':'1','pic_id':'|'.join(pic_id),'tid':'','pdetail':'','mid':'','isReEdit':'false','gif_ids':'','rank':'0','rankid':'','pub_source':'page_2','topic_id':'','updata_img_num':str(len(图片)),'pub_type':'dialog'}headers=self.headers.copy()headers.update({'Referer':'http://www.weibo.com/u/%s/home?wvr=5'%self.uid})res=self.session.post(url,headers=headers,data=data)is_success=Falseifres.status_code==200:is_success=Truereturnis_successOK,大功告成~完整源码详细查看相关文件相关文件https://github.com/CharlesPik...