python3 微博群关注 自动发群消息

一.开发环境

python3.6

windows7

chrome谷歌浏览器

需要的python的包 requests

亲测可运行,时间(2019-1-30)

二.找到需要的数据

2.1 在电脑上找到微博群

打开chrome浏览器

先清缓存,ctrl+shift +del ,清空cookie等缓存数据

按F12,点击调试界面左上角的按钮进入手机模式​

f5刷新进入https://m.weibo.cn,这么做主要是为了能够在手机上看到自己的微博群。

​​

群自己用手机app搜然后添加吧(这是唯一比较麻烦的地方了,trust me!)

2.2 group_id

(随笔=》随便)手误,见谅。

group_id记录下来,代码会用到。

2.3 关注,需要的数据

首先,当然是群里所有成员的列表了,关注某个人至少需要他的用户id吧。

​​


点开更多成员后成员列表往下拉一段,在右边的network找到groupmemberslist?group_id=xxx这条消息。注意在点“更多成员”之前,可以清一下network里的东西,比较好找。(觉得头疼不好找?其实我也经历过,多折腾一会就好了)

urluser ="https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=%s&page=%d"% (groupid, nums)

这里面的page参数就是第几页群成员,不会一次给你下发所有的成员。(实际需要下拉,才一点一点的展示出来)

返回的数据上图的Response就包含了群成员的信息,很长。

可以复制下来,百度json找个网站格式化http://www.bejson.com/

id就是群用户的id,screen_name的值显示一堆“乱码”,事实就是群用户的昵称(可以百度“编码”找网站 unicode转中文看看http://tool.chinaz.com/tools/unicode.aspx,可以忽略不影响步骤。)

正则找出respone返回的值里用card_group和后面 用[ ]包裹的json数据——用户的信息, 正则不熟的话,只能自己研究研究了,这里不多说。

pattern = re.compile('\['+'(.*?)'+']',re.S)json1 = pattern.findall(respone.text)[0]+']}'

"card_group"后面的就是可以转化为jsaon数组的数据了。

json_base = json.loads(json1)

card_group = json_base['card_group']

====================中场休息=========================

2.4这篇文章里不打算写登录获取cookie(比较麻烦,容易有挫败感。。)

登录后,随便找人点个关注

2.5 两个st参数

关注和发送群信息,各需要一个会变化的st参数

2.51关注的需要的st参数(唯二麻烦的)

st_url ='https://m.weibo.cn/api/config/'st_respone = requests.post(st_url, headers=headetr2, verify=False)       

st_json = json.loads(st_respone.content)       

print('st = '+ st_json['data']['st'])

st_url 如果你想问为什么是这个url,我告诉你猜的你会想揍我吗。。

其实在电脑上自己手动点关注的时候,在create里的headers的formdata里看到st的值,然后搜索。在一个respone里看到了

然后看到一个 叫config的,就比较顺眼,看看他的headers 里的urlhttps://m.weibo.cn/api/config,尝试复制到浏览器地址栏里,马上就返回我想要的值

{"preferQuickapp":0,"data":{"login":true,"st":"1de4bb","uid":"5156567902"},"ok":1}。

嗯,冥冥之中自有定数,是它了。

(找不到的话最好在打开群的界面刷新一次,可能在前面的操作里被你清掉了)

2.51发群信息需要的st参数(唯三麻烦的,事不过三)

首先,自己找个群,发个消息

sendMsg,需要额外获取的就是st参数。

chatgroup_url ='https://m.weibo.cn/groupChat/userChat/chat?group_id='+ str(groupid)chatgroup_respone = requests.get(chatgroup_url, headers=headetr2, verify=False)try:  chat_st = re.search(r'\"st\":\"(\w+)\"', chatgroup_respone.text)  chat_st_param = chat_st.group().split('"')[3]#在群里发消息需要的参数st,注意和关注的st参数不一样

还是搜eec616,不行就再打开群的界面,刷新浏览器,再搜。最终发现只有一条符合的

在respone发现 "st":"eec616" 有2个,用正则匹配其中一个就行。

3.最后上代码

headers里的cookie用自己的

guanzhugroup(xxxx)这里的groupid,需要是自己加入的群

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import requests

import sys

import json

import time

import re

import urllib3#不显示ssh验证的提示,不管也行

urllib3.disable_warnings()#不显示ssh验证的提示,不管也行urllib3.disable_warnings()

headers = {

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

        'Accept-Encoding':'gzip, deflate, br',

        'Accept-Language':'zh-CN,zh;q=0.9',

        'Cache-Control':'max-age=0',

        'Connection':'keep-alive',

        'Cookie':'_T_WM=* ***********',#步骤2.4登录微博后找到requestheader里的cookie

        'Host':'m.weibo.cn',

        'RA-Sid':'B781E81A-20150402-024118-ce25e1-ba5345',

        'RA-Ver':'3.0.8',

        # 'Upgrade-Insecure-Requests': '1',

        'User-Agent':'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Mobile Safari/537.36',

        'Referer':'https://m.weibo.cn/message',

    }

def guanzhugroup(groupid):

for numsin range(14, 49):# 这里是模拟页数,在获取groupMembersList的返回信息里有max_pageprint('***************第几页='+str(nums))

        print('***************第几页='+str(nums))

# urluser = "https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=4197189808619503&page="+str(nums)

        urluser ="https://m.weibo.cn/groupChat/userChat/groupMembersList?group_id=%s&page=%d" % (groupid, nums)

respone = requests.get(urluser, headers=headers, verify=False)

# print(respone)

        print(respone.text)

pattern = re.compile('\['+'(.*?)'+']',re.S)

json1 = pattern.findall(respone.text)[0]+']}'

        json_base = json.loads(json1)

print(json_base)

card_group = json_base['card_group']

st_url ='https://m.weibo.cn/api/config/'

        st_respone = requests.post(st_url, headers=headers, verify=False)

st_json = json.loads(st_respone.content)

print('st = ' + st_json['data']['st'])

# print(len(card_group))

        for numin range(0, len(card_group)):

member = card_group[num]

print(member['member']['id'])

print(print(member['member']['screen_name']))

postData2 = {"uid": member['member']['id'], 'st': st_json['data']['st']}# post请求传的数据

            url ='https://m.weibo.cn/api/friendships/create'

            respone1 = requests.post(url, data=postData2, headers=headers,verify=False)

print(respone1.text)

json_str = respone1.content

chatgroup_url ='https://m.weibo.cn/groupChat/userChat/chat?group_id=' +str(groupid)

chatgroup_respone = requests.get(chatgroup_url, headers=headers, verify=False)

print(chatgroup_respone.text)

try:

chat_st = re.search(r'\"st\":\"(\w+)\"', chatgroup_respone.text)

chat_st_param = chat_st.group().split('"')[3]#在群里发消息需要的参数st,注意和关注的st参数不一样

                sendmsg_url ='https://m.weibo.cn/groupChat/userChat/sendMsg'

                sendmsg_data = {

'content':'@%s 我关注你了' % member['member']['screen_name'],#这里的@没有实际的@功能,电脑上不太好@,不知道实际的@发的是什么。还在研究用手机设置代理或者安卓模拟器抓个包试试

                    'st': chat_st_param,

                    'group_id': groupid,

                }

sendmsg_respone = requests.post(sendmsg_url, headers=headers, data=sendmsg_data, verify=False)

print('send msg ret = '+sendmsg_respone.text)

except Exception as e:

print(e)

time.sleep(10)

time.sleep(30)

guanzhugroup(4075182799395477)

简书好像没对代码做处理,复制过来不太对了。可以去下载

篇幅比较长,其实东西不多,如果没研究过类似的东西会比较难上手,可以先收藏,再研究。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,841评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,415评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,904评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,051评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,055评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,255评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,729评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,377评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,517评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,420评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,467评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,144评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,735评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,812评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,029评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,528评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,126评论 2 341

推荐阅读更多精彩内容