百木园-与人分享,
就是让自己快乐。

Python实现一个简单的自动评论,自动点赞,自动关注脚本

前言

今天的这个脚本,是一个别人发的外包,交互界面的代码就不在这里说了,但是可以分享下自动评论、自动点赞、自动关注、采集评论和视频的数据是如何实现的

开发环境

python 3.8 运行代码
pycharm 2021.2 辅助敲代码
requests 第三方模块

原理:

模拟客户端,向服务器发送请求

对于本篇文章有疑问的同学可以加【资料白嫖、解答交流群:753182387】

代码实现

1. 请求伪装

def __init__(self):
    self.headers = {
        \'content-type\': \'application/json\',
        \'Cookie\': \'kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_ea128125517a46bd491ae9ccb255e242; client_key=65890b29; didv=1646739254078; _bl_uid=pCldq3L00L61qCzj6fytnk2wmhz5; userId=270932146; kuaishou.server.web_st=ChZrdWFpc2hvdS5zZXJ2ZXIud2ViLnN0EqABH2BHihXp4liEYWMBFv9aguyfs8BsbINQIWqgoDw0SimMkpXwM7PKpKdJcZbU12QOyeKFaG4unV5EUkkEswL0HnA8_A9z2ujLlKN__gRsxU2B5kIYgirTDPiVJ3uPN1sU9mqvog3auoNJxDdbKjVeFNK1wQ5HTM_yUvYvmWOx9iC8IKcvnmo9YnG_J9ske-t-wiCWMgSCA25HN6MRqCMxuhoSnIqSq99L0mk4jolsseGdcwiNIiC8rjheuewIA1Bk3LwkNIYikU2zobcuvgAiBbMnBuDixygFMAE; kuaishou.server.web_ph=55c7e6b2033ea94a3447ea98082642cd6f1a\',
        \'Host\': \'www.ks.com\',
        \'Origin\': \'https://www.ks.com\',
        \'Referer\': \'https://www.ks.com/search/video?searchKey=%E9%BB%91%E4%B8%9D\',
        \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36\',
    }
    self.url = \'https://www.ks.com/graphql\'

2. 获取搜索内容的方法

def get_search(self, keyword, pcursor):
    \"\"\"
    :param keyword: 关键词
    :param pcursor: 页码
    :return: 搜索作品
    \"\"\"
    json = {
        \'operationName\': \"visionSearchPhoto\",
        \'query\': \"fragment photoContent on PhotoEntity {\\n  id\\n  duration\\n  caption\\n  likeCount\\n  viewCount\\n  realLikeCount\\n  coverUrl\\n  photoUrl\\n  photoH265Url\\n  manifest\\n  manifestH265\\n  videoResource\\n  coverUrls {\\n    url\\n    __typename\\n  }\\n  timestamp  \\n  animatedCoverUrl\\n  distance\\n  videoRatio\\n  liked\\n  stereoType\\n  profileUserTopPhoto\\n  __typename\\n}\\n\\nfragment feedContent on Feed {\\n  type\\n  author {\\n    id\\n    name\\n    headerUrl\\n    following\\n    headerUrls {\\n      url\\n      __typename\\n    }\\n    __typename\\n  }\\n  photo {\\n    ...photoContent\\n    __typename\\n  }\\n  canAddComment\\n  llsid\\n  status\\n  currentPcursor\\n  __typename\\n}\\n\\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\\n  visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\\n    result\\n    llsid\\n    webPageArea\\n    feeds {\\n      ...feedContent\\n      __typename\\n    }\\n    searchSessionId\\n    pcursor\\n    aladdinBanner {\\n      imgUrl\\n      link\\n      __typename\\n    }\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {\'keyword\': keyword, \'pcursor\': pcursor, \'page\': \"search\"}
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

3. 获取作品评论

def get_comments(self, photoId, pcursor):
    \"\"\"
    :param photoId: 作品id
    :param pcursor: 页码
    :return: 评论内容
    \"\"\"
    json = {
        \'operationName\': \"commentListQuery\",
        \'query\': \"query commentListQuery($photoId: String, $pcursor: String) {  visionCommentList(photoId: $photoId, pcursor: $pcursor) {\\n    commentCount\\n        rootComments {\\n      commentId\\n      authorId\\n      authorName\\n      content\\n      headurl\\n      timestamp\\n      likedCount\\n      realLikedCount\\n      liked\\n      status\\n      subCommentCount\\n      subCommentsPcursor\\n      subComments {\\n        commentId\\n        authorId\\n        authorName\\n        content\\n        headurl\\n        timestamp\\n        likedCount\\n        realLikedCount\\n        liked\\n        status\\n        replyToUserName\\n        replyTo\\n        __typename\\n      }\\n      __typename\\n    }\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {\'photoId\': photoId, \'pcursor\': pcursor}
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

4. 自动评论

def post_comment(self, content, photoAuthorId, photoId):
    \"\"\"
    :param content: 评论内容
    :param photoAuthorId: 该作品的作者id
    :param photoId: 作品id
    :return: 有没有成功
    \"\"\"
    json = {
        \'operationName\': \"visionAddComment\",
        \'query\': \"mutation visionAddComment($photoId: String, $photoAuthorId: String, $content: String, $replyToCommentId: ID, $replyTo: ID, $expTag: String) {  (photoId: $photoId, photoAuthorId: $photoAuthorId, content: $content, replyToCommentId: $replyToCommentId, replyTo: $replyTo, expTag: $expTag) {\\n    result\\n    commentId\\n    content\\n    timestamp\\n    status\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {
            \'content\': content,
            \'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
            \'photoAuthorId\': photoAuthorId,
            \'photoId\': photoId
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

5. 点赞操作

def is_like(self, photoId, photoAuthorId):
    \"\"\"
    :param photoId: 作品id
    :param photoAuthorId: 该作品的作者id
    :return: 有没有成功
    \"\"\"
    json = {
        \'operationName\': \"visionVideoLike\",
        \'query\': \"mutation visionVideoLike($photoId: String, $photoAuthorId: String, $cancel: Int, $expTag: String) {\\n  visionVideoLike(photoId: $photoId, photoAuthorId: $photoAuthorId, cancel: $cancel, expTag: $expTag) {\\n    result\\n    __typename\\n  }\\n}\",
        \'variables\': {
            \'cancel\': 0,
            \'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
            \'photoAuthorId\': photoAuthorId,
            \'photoId\': photoId
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

6. 关注操作

def is_follow(self, touid):
    \"\"\"
    :param touid: 用户id
    :return:
    \"\"\"
    json = {
        \'operationName\': \"visionFollow\",
        \'query\': \"mutation visionFollow($touid: String, $ftype: Int, $followSource: Int, $expTag: String) {\\n  visionFollow(touid: $touid, ftype: $ftype, followSource: $followSource, expTag: $expTag) {\\n       followStatus\\n    hostName\\n    error_msg\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {
            \'expTag\': \"1_a/2005158523885162817_xpcwebsearchxxnull0\",
            \'followSource\': 3,
            \'ftype\': 1,
            \'touid\': touid
        }
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

7. 获取创作者信息

def get_userInfo(self, userId):
    \"\"\"

    :param userId: 用户ID
    :return: 用户信息
    \"\"\"
    json = {
        \'operationName\': \"visionProfile\",
        \'query\': \"query visionProfile($userId: String) {\\n  visionProfile(userId: $userId) {\\n       hostName\\n    userProfile {\\n      ownerCount {\\n        fan\\n        photo\\n        follow\\n        photo_public\\n        __typename\\n      }\\n      profile {\\n        gender\\n        user_name\\n        user_id\\n        headurl\\n        user_text\\n        user_profile_bg_url\\n        __typename\\n      }\\n      isFollowing\\n      __typename\\n    }\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {\'userId\': userId}
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

8. 获取创作者视频

def get_video(self, userId, pcursor):
    \"\"\"
    :param userId: 用户id
    :param pcursor: 页码
    :return: 作品
    \"\"\"
    json = {
        \'operationName\': \"visionProfilePhotoList\",
        \'query\': \"fragment photoContent on PhotoEntity {\\n    duration\\n  caption\\n  likeCount\\n  viewCount\\n  realLikeCount\\n  coverUrl\\n  photoUrl\\n  photoH265Url\\n  manifest\\n  manifestH265\\n  videoResource\\n  coverUrls {\\n    url\\n    __typename\\n  }\\n  timestamp\\n  expTag\\n  animatedCoverUrl\\n  distance\\n  videoRatio\\n  liked\\n  stereoType\\n  profileUserTopPhoto\\n  __typename\\n}\\n\\nfragment feedContent on Feed {\\n  type\\n  author {\\n    id\\n    name\\n    headerUrl\\n    following\\n    headerUrls {\\n      url\\n      __typename\\n    }\\n    __typename\\n  }\\n  photo {\\n    ...photoContent\\n    __typename\\n  }\\n  canAddComment\\n  llsid\\n  status\\n  currentPcursor\\n  __typename\\n}\\n\\nquery visionProfilePhotoList($pcursor: String, $userId: String, $page: String, $webPageArea: String) {\\n  visionProfilePhotoList(pcursor: $pcursor, userId: $userId, page: $page, webPageArea: $webPageArea) {\\n    result\\n    llsid\\n    webPageArea\\n    feeds {\\n      ...feedContent\\n      __typename\\n    }\\n    hostName\\n    pcursor\\n    __typename\\n  }\\n}\\n\",
        \'variables\': {\'userId\': userId, \'pcursor\': pcursor, \'page\': \"profile\"}
    }
    response = requests.post(url=self.url, json=json, headers=self.headers)
    json_data = response.json()
    print(json_data)
    return json_data

9. 调用函数

if __name__ == \'__main__\':
    kuaishou = KuaiShou()
    # 获取评论
    kuaishou.get_comments(\'3xzry7secwhunai\', \'\')
    # 发布评论
    kuaishou.post_comment(\'爱你\', \'3xgz9zaku7hig96\', \'3xydesqbvtrvcuq\')
    # 点赞
    kuaishou.is_like(\'3xydesqbvtrvcuq\', \'3xgz9zaku7hig96\')
    # 关注
    kuaishou.is_follow(\'3xxhfqquuachnje\')
    # 创作者信息
    kuaishou.get_userInfo(\'3xxhfqquuachnje\')
    # 获取创作者作品
    kuaishou.get_video(\'3xxhfqquuachnje\', \'\')

来源:https://www.cnblogs.com/qshhl/p/16323888.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Python实现一个简单的自动评论,自动点赞,自动关注脚本

相关推荐

  • 暂无文章