因为发现自己体重越发增大,感觉到平常不活动的话对自己身体会很不好,所以最近开始通过keep这个软件来锻炼身体。

keep和下厨房很相似,通过发动态来表示自己练习过某一个运动课程,也可以上传图片。社区里面的用户互动行为也是Comment+Digg的方式,与下厨房几乎一样。

因为有另外一个后端的同事也在keep,平常我们都会互相进行关注。大家在上面相互鼓励,然后评论等等,督促对方可以继续检查。不过前几天猛然发现同事发的一个动态被其他用户点赞,评论量突然很大(点赞数几百量级,评论几十)。因为我们都是最近才开始玩,所以这个量对于一个新手来说已经属于很大的量级,所以我当时推断应该是同事的Feed被官方推荐了。

当时心有疑虑,但是同时,自己攀比心理促使我马上打开charles,看看有什么办法能够超过他。(什么鬼)分析下来发现keep的API结构还算清晰,可是,Digg这个API没有加密。也就是说,给不同的人点赞的话,是可以自己通过API完成。给代码完成点赞,评论等功能提供了可乘之机。在分析了几个API之后,当天晚上写了一个点赞脚本。给陌生人点赞,收集回赞和粉丝,以下就是脚本内容。

# coding:utf-8
import requests
import json
import time
import random

auth = ''
xx = ''
headers = {'Authorization': auth,
           'X-KEEP-FROM': 'iOS',
           'X-KEEP-VERSION': '2.11.1',
           'X-KEEP-TIMEZONE': 'Asia/Shanghai',
           'X-X': xx,
           'User-Agent': 'Keep/2311 (iPhone; iOS 9.2.1; Scale/2.00)'}

url = 'https://api.gotokeep.com/v1.1/timeline/trending?filter=true'


def request_by_last(last_id=None):
    full_url = (url+'&last_id='+last_id) if last_id else url
    r = requests.get(url, headers=headers)
    j = r.json()
    user_statuses = j.get('data')
    total = len(user_statuses)
    this_last = ''
    for count, user_status in enumerate(user_statuses):
        status_id = user_status.get('id')
        digg_url = 'https://api.gotokeep.com/v1.1/entries/'+status_id+'/likes'
        sleep_time = random.randint(1000, 10000)
        user_name = user_status['author']['username']
        # time.sleep(sleep_time/1000.0)
        s_r = requests.post(digg_url, headers=headers, verify=False)
        print '给   '+user_name.encode('utf-8')+'  点赞!你真棒!'
        if total == count+1:
            this_last = status_id
            request_by_last(this_last)

if __name__ == '__main__':
    request_by_last()

因为这个keep帐号自己还会用,所以当时加了random函数,来模拟用户操作的时间间隔。当时晚上跑了一两个小时,收集了很多赞,心想之后可以加crontab,然后就可以持续的收集啦。

第二天的时候跟同事聊起这个事情,完全没有想到,同事也是写了一个脚本(囧)。而且同事告诉我,keep君木有设置时间间隔,所以他当时总共有收了1k多的粉~~

(后记:1.keep君已经设置了间隔,不能无节制的赞了。2.没加crontab,其实自己知道原理之后就不好玩啦,还是慢慢自己变瘦发有效内容更靠谱。)