├── .gitignore ├── Dockerfile ├── README.md ├── api.py ├── config.py ├── fake_useragent_0.1.11.json ├── main.py ├── requirements.txt ├── template.py └── utils.py /.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ project files 2 | .idea 3 | *.iml 4 | out 5 | venv 6 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 2 | 3 | RUN mkdir -p /usr/src/app 4 | 5 | WORKDIR /usr/src/app 6 | 7 | COPY . . 8 | 9 | ENV MODE server 10 | 11 | RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ 12 | 13 | ENTRYPOINT ["python", "main.py"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 设计灵感 2 | 没啥,被女朋友吐槽整天就知道写代码,人家程序员男朋友还知道做个微信聊天机器人陪女朋友聊天等等等。机器人我写不了,但是我可以调用别人家的机器人然后说是我写的呀。微信聊天也有现成的库,废话不多说,直接开撸,写了一会儿偶然发现了一个兄弟项目 [EverydayWechat](https://github.com/sfyc23/EverydayWechat)(做的比我好,抄一点🙈)。 3 | 4 | ## 主要依赖库 5 | - [ItChat](https://github.com/littlecodersh/ItChat) - 微信个人号收发消息 6 | - [APScheduler](https://github.com/agronholm/apscheduler) - 定时任务 7 | - [requests](https://github.com/kennethreitz/requests) - 网络请求 8 | - [BeautifulSoup4](https://www.crummy.com/software/BeautifulSoup/) - 页面解析 9 | 10 | ## 功能 11 | - [x] 定时给女朋友发送微信消息 12 | - [ ] 陪聊机器人 13 | 14 | ## 数据来源 15 | - [天气 API](https://www.tianqiapi.com/api) - 天气信息 16 | - [ONE · 一个](http://wufazhuce.com/) - 一句话格言 17 | - [金山词霸](http://open.iciba.com/dsapi/) - 金山词霸每日一句 18 | - [一言](https://api.imjad.cn/hitokoto.md) - 一言(Hitokoto/ヒトコト) 19 | 20 | ## 使用 21 | - 安装依赖 22 | ```bash 23 | $ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/ 24 | ``` 25 | 26 | - 运行 27 | ```bash 28 | $ python main.py 29 | ``` 30 | 31 | ## Docker 32 | - 构建镜像 33 | ```bash 34 | $ docker build --no-cache -t nekolr/wechat-robot:0.0.1 . 35 | ``` 36 | 37 | - 运行容器(需要调整时区) 38 | ```bash 39 | $ docker run --name wechat-robot -dit \ 40 | -e TZ="Asia/Shanghai" \ 41 | --network=host \ 42 | nekolr/wechat-robot:0.0.1 43 | ``` 44 | 45 | - 查看日志(这样才可以扫码) 46 | ```bash 47 | docker logs -f wechat-robot 48 | ``` -------------------------------------------------------------------------------- /api.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | from bs4 import BeautifulSoup 4 | import template 5 | import requests 6 | from utils import (get_json, say_hello) 7 | import logging 8 | from fake_useragent import UserAgent 9 | import time 10 | 11 | # UserAgent 12 | ua = UserAgent(path='fake_useragent_0.1.11.json') 13 | 14 | 15 | def get_daily_sentence(): 16 | """ 17 | 金山词霸每日一句 18 | :return: 19 | """ 20 | logging.info('从『 http://open.iciba.com/dsapi/ 』获取金山词霸每日一句') 21 | return get_json(requests.get('http://open.iciba.com/dsapi/')) 22 | 23 | 24 | def get_one_info(): 25 | """ 26 | 从『一个。one』获取信息 27 | :return: str, 一句格言或者短语。 28 | """ 29 | logging.info('从『 http://wufazhuce.com/ 』获取一句格言') 30 | response = requests.get("http://wufazhuce.com/", headers={'User-Agent': ua.random}) 31 | if response.status_code == 200: 32 | soup_texts = BeautifulSoup(response.text, 'lxml') 33 | # 『one -个』 中的每日一句 34 | return soup_texts.find_all('div', class_='fp-one-cita')[0].find('a').text 35 | 36 | 37 | def get_one_info_v1(): 38 | """ 39 | 获取一言(随机版) 40 | :return: 41 | """ 42 | logging.info('从『 https://api.imjad.cn/hitokoto/ 』获取一句格言') 43 | r = get_json( 44 | requests.get("https://api.imjad.cn/hitokoto/", params={"encode": "json"}, headers={'User-Agent': ua.random})) 45 | return r['hitokoto'] + " —— " + r['source'] 46 | 47 | 48 | def get_weather(city): 49 | """ 50 | 获取天气信息 51 | :return: 52 | """ 53 | logging.info('从『 https://www.tianqiapi.com/api 』获取天气信息') 54 | weather = get_json(requests.get('https://www.tianqiapi.com/api', params={"version": "v1", "city": city})) 55 | if weather is not None: 56 | return template.weather_template.substitute( 57 | date=weather['data'][0]['date'], 58 | week=weather['data'][0]['week'], 59 | city=weather['city'], 60 | wea=weather['data'][0]['wea'], 61 | high=weather['data'][0]['tem1'], 62 | low=weather['data'][0]['tem2'], 63 | quality=weather['data'][0]['air_level'], 64 | win=weather['data'][0]['win'][0], 65 | win_speed=weather['data'][0]['win_speed'] 66 | ) 67 | 68 | 69 | def get_weather_v1(city): 70 | """ 71 | 获取天气信息 72 | :param city: 73 | :return: 74 | """ 75 | logging.info('从『 http://www.nmc.cn 』获取天气信息') 76 | weather = get_json(requests.get('http://www.nmc.cn/f/rest/weather/' + city, headers={'User-Agent': ua.random})) 77 | if weather is not None: 78 | # 有时(比如早上 6 点)天气信息还没有更新,此时获取明天的数据 79 | now = time.strftime("%Y-%m-%d", time.localtime(time.time())) 80 | if now != weather[0]['detail'][0]['date']: 81 | return template.weather_template_v1.substitute( 82 | day='今天', 83 | hello=say_hello(), 84 | date=now, 85 | city=weather[0]['station']['city'], 86 | day_wea=weather[0]['detail'][1]['day']['weather']['info'], 87 | night_wea=weather[0]['detail'][1]['night']['weather']['info'], 88 | high=weather[0]['detail'][1]['day']['weather']['temperature'] + ' 度', 89 | low=weather[0]['detail'][1]['night']['weather']['temperature'] + ' 度', 90 | day_win=weather[0]['detail'][1]['day']['wind']['direct'], 91 | night_win=weather[0]['detail'][1]['night']['wind']['direct'], 92 | day_win_speed=weather[0]['detail'][1]['day']['wind']['power'], 93 | night_win_speed=weather[0]['detail'][1]['night']['wind']['power']) 94 | # 下午接口数据温度会变成 9999 度,此时获取明天的数据 95 | elif weather[0]['detail'][0]['day']['weather']['temperature'] == '9999': 96 | return template.weather_template_v1.substitute( 97 | day='明天', 98 | hello=say_hello(), 99 | date=weather[0]['detail'][0]['date'], 100 | city=weather[0]['station']['city'], 101 | day_wea=weather[0]['detail'][1]['day']['weather']['info'], 102 | night_wea=weather[0]['detail'][1]['night']['weather']['info'], 103 | high=weather[0]['detail'][1]['day']['weather']['temperature'] + ' 度', 104 | low=weather[0]['detail'][1]['night']['weather']['temperature'] + ' 度', 105 | day_win=weather[0]['detail'][1]['day']['wind']['direct'], 106 | night_win=weather[0]['detail'][1]['night']['wind']['direct'], 107 | day_win_speed=weather[0]['detail'][1]['day']['wind']['power'], 108 | night_win_speed=weather[0]['detail'][1]['night']['wind']['power']) 109 | else: 110 | return template.weather_template_v1.substitute( 111 | day='今天', 112 | hello=say_hello(), 113 | date=weather[0]['detail'][0]['date'], 114 | city=weather[0]['station']['city'], 115 | day_wea=weather[0]['detail'][0]['day']['weather']['info'], 116 | night_wea=weather[0]['detail'][0]['night']['weather']['info'], 117 | high=weather[0]['detail'][0]['day']['weather']['temperature'] + ' 度', 118 | low=weather[0]['detail'][0]['night']['weather']['temperature'] + ' 度', 119 | day_win=weather[0]['detail'][0]['day']['wind']['direct'], 120 | night_win=weather[0]['detail'][0]['night']['wind']['direct'], 121 | day_win_speed=weather[0]['detail'][0]['day']['wind']['power'], 122 | night_win_speed=weather[0]['detail'][0]['night']['wind']['power']) 123 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | 配置文件 6 | """ 7 | config = { 8 | # 女朋友微信名称 9 | 'girl_friend': u'nekolr', 10 | # 每天发送消息的时间 6 点 40 分 11 | 'hour': '6', 12 | 'minute': '40', 13 | # the time (in seconds) how much this job’s execution is allowed to be late 14 | 'grace_time': 15 * 60, 15 | # 女朋友所在地 16 | 'city': '通州', 17 | # 日志输出格式 18 | 'logging_format': '%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' 19 | } 20 | -------------------------------------------------------------------------------- /fake_useragent_0.1.11.json: -------------------------------------------------------------------------------- 1 | { 2 | "browsers": { 3 | "chrome": [ 4 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", 5 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36", 6 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", 7 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", 8 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36", 9 | "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", 10 | "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", 11 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36", 12 | "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36", 13 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36", 14 | "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", 15 | "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", 16 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", 17 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", 18 | "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", 19 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36", 20 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36", 21 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36", 22 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36", 23 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36", 24 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36", 25 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F", 26 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10", 27 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36", 28 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36", 29 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36", 30 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36", 31 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36", 32 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36", 33 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36", 34 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36", 35 | "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36", 36 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36", 37 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 38 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36", 39 | "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36", 40 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36", 41 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 42 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 43 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 44 | "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 45 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 46 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", 47 | "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36", 48 | "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36", 49 | "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36", 50 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17", 51 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", 52 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15", 53 | "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14" 54 | ], 55 | "opera": [ 56 | "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16", 57 | "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14", 58 | "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14", 59 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14", 60 | "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02", 61 | "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00", 62 | "Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00", 63 | "Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00", 64 | "Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00", 65 | "Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0", 66 | "Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62", 67 | "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62", 68 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52", 69 | "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52", 70 | "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51", 71 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51", 72 | "Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50", 73 | "Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50", 74 | "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11", 75 | "Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11", 76 | "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11", 77 | "Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10", 78 | "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10", 79 | "Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10", 80 | "Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1", 81 | "Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01", 82 | "Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01", 83 | "Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01", 84 | "Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01", 85 | "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01", 86 | "Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01", 87 | "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01", 88 | "Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01", 89 | "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01", 90 | "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01", 91 | "Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01", 92 | "Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01", 93 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101213 Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01", 94 | "Mozilla/5.0 (Windows NT 6.1; U; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01", 95 | "Mozilla/5.0 (Windows NT 6.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01", 96 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01", 97 | "Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00", 98 | "Opera/9.80 (X11; Linux i686; U; it) Presto/2.7.62 Version/11.00", 99 | "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00", 100 | "Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00", 101 | "Opera/9.80 (Windows NT 6.1; U; ko) Presto/2.7.62 Version/11.00", 102 | "Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00", 103 | "Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00", 104 | "Opera/9.80 (Windows NT 6.1 x64; U; en) Presto/2.7.62 Version/11.00", 105 | "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.39 Version/11.00" 106 | ], 107 | "firefox": [ 108 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", 109 | "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0", 110 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0", 111 | "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0", 112 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0", 113 | "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0", 114 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0", 115 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0", 116 | "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0", 117 | "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0", 118 | "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3", 119 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0", 120 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0", 121 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0", 122 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", 123 | "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", 124 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0", 125 | "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0", 126 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0", 127 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0", 128 | "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0", 129 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0", 130 | "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0", 131 | "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0", 132 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", 133 | "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", 134 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0", 135 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0", 136 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0", 137 | "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0", 138 | "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0", 139 | "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0", 140 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0", 141 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0", 142 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0", 143 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0", 144 | "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0", 145 | "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0", 146 | "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0", 147 | "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0", 148 | "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0", 149 | "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0", 150 | "Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0", 151 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0", 152 | "Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0", 153 | "Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0", 154 | "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0", 155 | "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1", 156 | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", 157 | "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6" 158 | ], 159 | "internetexplorer": [ 160 | "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko", 161 | "Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko", 162 | "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0", 163 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)", 164 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)", 165 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", 166 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", 167 | "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)", 168 | "Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)", 169 | "Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)", 170 | "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", 171 | "Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)", 172 | "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))", 173 | "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)", 174 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)", 175 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)", 176 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7", 177 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)", 178 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)", 179 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", 180 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", 181 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)", 182 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0", 183 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)", 184 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)", 185 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)", 186 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)", 187 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)", 188 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205", 189 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.1; SV1; .NET CLR 2.8.52393; WOW64; en-US)", 190 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)", 191 | "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)", 192 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)", 193 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)", 194 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)", 195 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; .NET CLR 2.7.58687; SLCC2; Media Center PC 5.0; Zune 3.4; Tablet PC 3.6; InfoPath.3)", 196 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)", 197 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)", 198 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)", 199 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", 200 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)", 201 | "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)", 202 | "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS)", 203 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)", 204 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)", 205 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8", 206 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)", 207 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)", 208 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)", 209 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)" 210 | ], 211 | "safari": [ 212 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", 213 | "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25", 214 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2", 215 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10", 216 | "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3", 217 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", 218 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", 219 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 220 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 221 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 222 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 223 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 224 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 225 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 226 | "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 227 | "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 228 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 229 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 230 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; sv-se) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 231 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 232 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 233 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 234 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 235 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 236 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 237 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 238 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", 239 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 240 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 241 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 242 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 243 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 244 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 245 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 246 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 247 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; it-IT) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 248 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 249 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/534.16+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 250 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-ch) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 251 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 252 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 253 | "Mozilla/5.0 (Android 2.2; Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", 254 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 255 | "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 256 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; tr-TR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 257 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 258 | "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 259 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 260 | "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", 261 | "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5" 262 | ] 263 | }, 264 | "randomize": { 265 | "344": "chrome", 266 | "819": "firefox", 267 | "346": "chrome", 268 | "347": "chrome", 269 | "340": "chrome", 270 | "341": "chrome", 271 | "342": "chrome", 272 | "343": "chrome", 273 | "810": "internetexplorer", 274 | "811": "internetexplorer", 275 | "812": "internetexplorer", 276 | "813": "firefox", 277 | "348": "chrome", 278 | "349": "chrome", 279 | "816": "firefox", 280 | "817": "firefox", 281 | "737": "chrome", 282 | "719": "chrome", 283 | "718": "chrome", 284 | "717": "chrome", 285 | "716": "chrome", 286 | "715": "chrome", 287 | "714": "chrome", 288 | "713": "chrome", 289 | "712": "chrome", 290 | "711": "chrome", 291 | "710": "chrome", 292 | "421": "chrome", 293 | "129": "chrome", 294 | "420": "chrome", 295 | "423": "chrome", 296 | "422": "chrome", 297 | "425": "chrome", 298 | "619": "chrome", 299 | "424": "chrome", 300 | "427": "chrome", 301 | "298": "chrome", 302 | "299": "chrome", 303 | "296": "chrome", 304 | "297": "chrome", 305 | "294": "chrome", 306 | "295": "chrome", 307 | "292": "chrome", 308 | "293": "chrome", 309 | "290": "chrome", 310 | "291": "chrome", 311 | "591": "chrome", 312 | "590": "chrome", 313 | "593": "chrome", 314 | "592": "chrome", 315 | "595": "chrome", 316 | "594": "chrome", 317 | "597": "chrome", 318 | "596": "chrome", 319 | "195": "chrome", 320 | "194": "chrome", 321 | "197": "chrome", 322 | "196": "chrome", 323 | "191": "chrome", 324 | "190": "chrome", 325 | "193": "chrome", 326 | "192": "chrome", 327 | "270": "chrome", 328 | "271": "chrome", 329 | "272": "chrome", 330 | "273": "chrome", 331 | "274": "chrome", 332 | "275": "chrome", 333 | "276": "chrome", 334 | "277": "chrome", 335 | "278": "chrome", 336 | "279": "chrome", 337 | "569": "chrome", 338 | "497": "chrome", 339 | "524": "chrome", 340 | "525": "chrome", 341 | "526": "chrome", 342 | "527": "chrome", 343 | "520": "chrome", 344 | "521": "chrome", 345 | "522": "chrome", 346 | "523": "chrome", 347 | "528": "chrome", 348 | "529": "chrome", 349 | "449": "chrome", 350 | "448": "chrome", 351 | "345": "chrome", 352 | "443": "chrome", 353 | "442": "chrome", 354 | "441": "chrome", 355 | "440": "chrome", 356 | "447": "chrome", 357 | "446": "chrome", 358 | "445": "chrome", 359 | "444": "chrome", 360 | "47": "chrome", 361 | "108": "chrome", 362 | "109": "chrome", 363 | "102": "chrome", 364 | "103": "chrome", 365 | "100": "chrome", 366 | "101": "chrome", 367 | "106": "chrome", 368 | "107": "chrome", 369 | "104": "chrome", 370 | "105": "chrome", 371 | "902": "firefox", 372 | "903": "firefox", 373 | "39": "chrome", 374 | "38": "chrome", 375 | "906": "firefox", 376 | "907": "firefox", 377 | "904": "firefox", 378 | "905": "firefox", 379 | "33": "chrome", 380 | "32": "chrome", 381 | "31": "chrome", 382 | "30": "chrome", 383 | "37": "chrome", 384 | "36": "chrome", 385 | "35": "chrome", 386 | "34": "chrome", 387 | "641": "chrome", 388 | "640": "chrome", 389 | "643": "chrome", 390 | "642": "chrome", 391 | "645": "chrome", 392 | "644": "chrome", 393 | "438": "chrome", 394 | "439": "chrome", 395 | "436": "chrome", 396 | "437": "chrome", 397 | "434": "chrome", 398 | "435": "chrome", 399 | "432": "chrome", 400 | "433": "chrome", 401 | "430": "chrome", 402 | "431": "chrome", 403 | "826": "firefox", 404 | "339": "chrome", 405 | "338": "chrome", 406 | "335": "chrome", 407 | "334": "chrome", 408 | "337": "chrome", 409 | "336": "chrome", 410 | "331": "chrome", 411 | "330": "chrome", 412 | "333": "chrome", 413 | "332": "chrome", 414 | "559": "chrome", 415 | "745": "chrome", 416 | "854": "firefox", 417 | "818": "firefox", 418 | "856": "firefox", 419 | "857": "firefox", 420 | "850": "firefox", 421 | "851": "firefox", 422 | "852": "firefox", 423 | "0": "chrome", 424 | "858": "firefox", 425 | "859": "firefox", 426 | "748": "chrome", 427 | "6": "chrome", 428 | "43": "chrome", 429 | "99": "chrome", 430 | "98": "chrome", 431 | "91": "chrome", 432 | "90": "chrome", 433 | "93": "chrome", 434 | "92": "chrome", 435 | "95": "chrome", 436 | "94": "chrome", 437 | "97": "chrome", 438 | "96": "chrome", 439 | "814": "firefox", 440 | "815": "firefox", 441 | "153": "chrome", 442 | "740": "chrome", 443 | "741": "chrome", 444 | "742": "chrome", 445 | "743": "chrome", 446 | "744": "chrome", 447 | "558": "chrome", 448 | "746": "chrome", 449 | "747": "chrome", 450 | "555": "chrome", 451 | "554": "chrome", 452 | "557": "chrome", 453 | "556": "chrome", 454 | "551": "chrome", 455 | "550": "chrome", 456 | "553": "chrome", 457 | "552": "chrome", 458 | "238": "chrome", 459 | "239": "chrome", 460 | "234": "chrome", 461 | "235": "chrome", 462 | "236": "chrome", 463 | "237": "chrome", 464 | "230": "chrome", 465 | "231": "chrome", 466 | "232": "chrome", 467 | "233": "chrome", 468 | "1": "chrome", 469 | "155": "chrome", 470 | "146": "chrome", 471 | "147": "chrome", 472 | "618": "chrome", 473 | "145": "chrome", 474 | "142": "chrome", 475 | "143": "chrome", 476 | "140": "chrome", 477 | "141": "chrome", 478 | "612": "chrome", 479 | "613": "chrome", 480 | "610": "chrome", 481 | "611": "chrome", 482 | "616": "chrome", 483 | "617": "chrome", 484 | "148": "chrome", 485 | "149": "chrome", 486 | "46": "chrome", 487 | "154": "chrome", 488 | "948": "safari", 489 | "949": "safari", 490 | "946": "safari", 491 | "947": "safari", 492 | "944": "safari", 493 | "945": "safari", 494 | "942": "safari", 495 | "943": "safari", 496 | "940": "safari", 497 | "941": "safari", 498 | "689": "chrome", 499 | "688": "chrome", 500 | "685": "chrome", 501 | "684": "chrome", 502 | "687": "chrome", 503 | "686": "chrome", 504 | "681": "chrome", 505 | "680": "chrome", 506 | "683": "chrome", 507 | "682": "chrome", 508 | "458": "chrome", 509 | "459": "chrome", 510 | "133": "chrome", 511 | "132": "chrome", 512 | "131": "chrome", 513 | "130": "chrome", 514 | "137": "chrome", 515 | "136": "chrome", 516 | "135": "chrome", 517 | "134": "chrome", 518 | "494": "chrome", 519 | "495": "chrome", 520 | "139": "chrome", 521 | "138": "chrome", 522 | "490": "chrome", 523 | "491": "chrome", 524 | "492": "chrome", 525 | "493": "chrome", 526 | "24": "chrome", 527 | "25": "chrome", 528 | "26": "chrome", 529 | "27": "chrome", 530 | "20": "chrome", 531 | "21": "chrome", 532 | "22": "chrome", 533 | "23": "chrome", 534 | "28": "chrome", 535 | "29": "chrome", 536 | "820": "firefox", 537 | "407": "chrome", 538 | "406": "chrome", 539 | "405": "chrome", 540 | "404": "chrome", 541 | "403": "chrome", 542 | "402": "chrome", 543 | "401": "chrome", 544 | "400": "chrome", 545 | "933": "firefox", 546 | "932": "firefox", 547 | "931": "firefox", 548 | "930": "firefox", 549 | "937": "safari", 550 | "452": "chrome", 551 | "409": "chrome", 552 | "408": "chrome", 553 | "453": "chrome", 554 | "414": "chrome", 555 | "183": "chrome", 556 | "415": "chrome", 557 | "379": "chrome", 558 | "378": "chrome", 559 | "228": "chrome", 560 | "829": "firefox", 561 | "828": "firefox", 562 | "371": "chrome", 563 | "370": "chrome", 564 | "373": "chrome", 565 | "372": "chrome", 566 | "375": "chrome", 567 | "374": "chrome", 568 | "377": "chrome", 569 | "376": "chrome", 570 | "708": "chrome", 571 | "709": "chrome", 572 | "704": "chrome", 573 | "705": "chrome", 574 | "706": "chrome", 575 | "707": "chrome", 576 | "700": "chrome", 577 | "144": "chrome", 578 | "702": "chrome", 579 | "703": "chrome", 580 | "393": "chrome", 581 | "392": "chrome", 582 | "88": "chrome", 583 | "89": "chrome", 584 | "397": "chrome", 585 | "396": "chrome", 586 | "395": "chrome", 587 | "394": "chrome", 588 | "82": "chrome", 589 | "83": "chrome", 590 | "80": "chrome", 591 | "81": "chrome", 592 | "86": "chrome", 593 | "87": "chrome", 594 | "84": "chrome", 595 | "85": "chrome", 596 | "797": "internetexplorer", 597 | "796": "internetexplorer", 598 | "795": "internetexplorer", 599 | "794": "internetexplorer", 600 | "793": "internetexplorer", 601 | "792": "internetexplorer", 602 | "791": "internetexplorer", 603 | "790": "internetexplorer", 604 | "749": "chrome", 605 | "799": "internetexplorer", 606 | "798": "internetexplorer", 607 | "7": "chrome", 608 | "170": "chrome", 609 | "586": "chrome", 610 | "587": "chrome", 611 | "584": "chrome", 612 | "585": "chrome", 613 | "582": "chrome", 614 | "583": "chrome", 615 | "580": "chrome", 616 | "581": "chrome", 617 | "588": "chrome", 618 | "589": "chrome", 619 | "245": "chrome", 620 | "244": "chrome", 621 | "247": "chrome", 622 | "246": "chrome", 623 | "241": "chrome", 624 | "614": "chrome", 625 | "243": "chrome", 626 | "242": "chrome", 627 | "615": "chrome", 628 | "249": "chrome", 629 | "248": "chrome", 630 | "418": "chrome", 631 | "419": "chrome", 632 | "519": "chrome", 633 | "518": "chrome", 634 | "511": "chrome", 635 | "510": "chrome", 636 | "513": "chrome", 637 | "512": "chrome", 638 | "515": "chrome", 639 | "514": "chrome", 640 | "517": "chrome", 641 | "516": "chrome", 642 | "623": "chrome", 643 | "622": "chrome", 644 | "621": "chrome", 645 | "620": "chrome", 646 | "627": "chrome", 647 | "626": "chrome", 648 | "625": "chrome", 649 | "624": "chrome", 650 | "450": "chrome", 651 | "451": "chrome", 652 | "629": "chrome", 653 | "628": "chrome", 654 | "454": "chrome", 655 | "455": "chrome", 656 | "456": "chrome", 657 | "457": "chrome", 658 | "179": "chrome", 659 | "178": "chrome", 660 | "177": "chrome", 661 | "199": "chrome", 662 | "175": "chrome", 663 | "174": "chrome", 664 | "173": "chrome", 665 | "172": "chrome", 666 | "171": "chrome", 667 | "198": "chrome", 668 | "977": "opera", 669 | "182": "chrome", 670 | "975": "opera", 671 | "974": "opera", 672 | "973": "opera", 673 | "972": "opera", 674 | "971": "opera", 675 | "970": "opera", 676 | "180": "chrome", 677 | "979": "opera", 678 | "978": "opera", 679 | "656": "chrome", 680 | "599": "chrome", 681 | "654": "chrome", 682 | "181": "chrome", 683 | "186": "chrome", 684 | "187": "chrome", 685 | "184": "chrome", 686 | "185": "chrome", 687 | "652": "chrome", 688 | "188": "chrome", 689 | "189": "chrome", 690 | "658": "chrome", 691 | "653": "chrome", 692 | "650": "chrome", 693 | "651": "chrome", 694 | "11": "chrome", 695 | "10": "chrome", 696 | "13": "chrome", 697 | "12": "chrome", 698 | "15": "chrome", 699 | "14": "chrome", 700 | "17": "chrome", 701 | "16": "chrome", 702 | "19": "chrome", 703 | "18": "chrome", 704 | "863": "firefox", 705 | "862": "firefox", 706 | "865": "firefox", 707 | "864": "firefox", 708 | "867": "firefox", 709 | "866": "firefox", 710 | "354": "chrome", 711 | "659": "chrome", 712 | "44": "chrome", 713 | "883": "firefox", 714 | "882": "firefox", 715 | "881": "firefox", 716 | "880": "firefox", 717 | "887": "firefox", 718 | "886": "firefox", 719 | "885": "firefox", 720 | "884": "firefox", 721 | "889": "firefox", 722 | "888": "firefox", 723 | "116": "chrome", 724 | "45": "chrome", 725 | "657": "chrome", 726 | "355": "chrome", 727 | "322": "chrome", 728 | "323": "chrome", 729 | "320": "chrome", 730 | "321": "chrome", 731 | "326": "chrome", 732 | "327": "chrome", 733 | "324": "chrome", 734 | "325": "chrome", 735 | "328": "chrome", 736 | "329": "chrome", 737 | "562": "chrome", 738 | "201": "chrome", 739 | "200": "chrome", 740 | "203": "chrome", 741 | "202": "chrome", 742 | "205": "chrome", 743 | "204": "chrome", 744 | "207": "chrome", 745 | "206": "chrome", 746 | "209": "chrome", 747 | "208": "chrome", 748 | "779": "internetexplorer", 749 | "778": "internetexplorer", 750 | "77": "chrome", 751 | "76": "chrome", 752 | "75": "chrome", 753 | "74": "chrome", 754 | "73": "chrome", 755 | "72": "chrome", 756 | "71": "chrome", 757 | "70": "chrome", 758 | "655": "chrome", 759 | "567": "chrome", 760 | "79": "chrome", 761 | "78": "chrome", 762 | "359": "chrome", 763 | "358": "chrome", 764 | "669": "chrome", 765 | "668": "chrome", 766 | "667": "chrome", 767 | "666": "chrome", 768 | "665": "chrome", 769 | "664": "chrome", 770 | "663": "chrome", 771 | "662": "chrome", 772 | "661": "chrome", 773 | "660": "chrome", 774 | "215": "chrome", 775 | "692": "chrome", 776 | "693": "chrome", 777 | "690": "chrome", 778 | "691": "chrome", 779 | "696": "chrome", 780 | "697": "chrome", 781 | "694": "chrome", 782 | "695": "chrome", 783 | "698": "chrome", 784 | "699": "chrome", 785 | "542": "chrome", 786 | "543": "chrome", 787 | "540": "chrome", 788 | "541": "chrome", 789 | "546": "chrome", 790 | "547": "chrome", 791 | "544": "chrome", 792 | "545": "chrome", 793 | "8": "chrome", 794 | "548": "chrome", 795 | "549": "chrome", 796 | "598": "chrome", 797 | "869": "firefox", 798 | "868": "firefox", 799 | "120": "chrome", 800 | "121": "chrome", 801 | "122": "chrome", 802 | "123": "chrome", 803 | "124": "chrome", 804 | "125": "chrome", 805 | "126": "chrome", 806 | "127": "chrome", 807 | "128": "chrome", 808 | "2": "chrome", 809 | "219": "chrome", 810 | "176": "chrome", 811 | "214": "chrome", 812 | "563": "chrome", 813 | "928": "firefox", 814 | "929": "firefox", 815 | "416": "chrome", 816 | "417": "chrome", 817 | "410": "chrome", 818 | "411": "chrome", 819 | "412": "chrome", 820 | "413": "chrome", 821 | "920": "firefox", 822 | "498": "chrome", 823 | "922": "firefox", 824 | "923": "firefox", 825 | "924": "firefox", 826 | "925": "firefox", 827 | "926": "firefox", 828 | "927": "firefox", 829 | "319": "chrome", 830 | "318": "chrome", 831 | "313": "chrome", 832 | "312": "chrome", 833 | "311": "chrome", 834 | "310": "chrome", 835 | "317": "chrome", 836 | "316": "chrome", 837 | "315": "chrome", 838 | "314": "chrome", 839 | "921": "firefox", 840 | "496": "chrome", 841 | "832": "firefox", 842 | "833": "firefox", 843 | "830": "firefox", 844 | "831": "firefox", 845 | "836": "firefox", 846 | "837": "firefox", 847 | "834": "firefox", 848 | "835": "firefox", 849 | "838": "firefox", 850 | "839": "firefox", 851 | "3": "chrome", 852 | "368": "chrome", 853 | "369": "chrome", 854 | "366": "chrome", 855 | "367": "chrome", 856 | "364": "chrome", 857 | "365": "chrome", 858 | "362": "chrome", 859 | "363": "chrome", 860 | "360": "chrome", 861 | "361": "chrome", 862 | "218": "chrome", 863 | "380": "chrome", 864 | "861": "firefox", 865 | "382": "chrome", 866 | "383": "chrome", 867 | "384": "chrome", 868 | "385": "chrome", 869 | "386": "chrome", 870 | "387": "chrome", 871 | "388": "chrome", 872 | "389": "chrome", 873 | "784": "internetexplorer", 874 | "785": "internetexplorer", 875 | "786": "internetexplorer", 876 | "787": "internetexplorer", 877 | "780": "internetexplorer", 878 | "781": "internetexplorer", 879 | "782": "internetexplorer", 880 | "381": "chrome", 881 | "788": "internetexplorer", 882 | "789": "internetexplorer", 883 | "860": "firefox", 884 | "151": "chrome", 885 | "579": "chrome", 886 | "578": "chrome", 887 | "150": "chrome", 888 | "573": "chrome", 889 | "572": "chrome", 890 | "571": "chrome", 891 | "570": "chrome", 892 | "577": "chrome", 893 | "576": "chrome", 894 | "575": "chrome", 895 | "574": "chrome", 896 | "60": "chrome", 897 | "61": "chrome", 898 | "62": "chrome", 899 | "259": "chrome", 900 | "64": "chrome", 901 | "65": "chrome", 902 | "66": "chrome", 903 | "67": "chrome", 904 | "68": "chrome", 905 | "253": "chrome", 906 | "250": "chrome", 907 | "251": "chrome", 908 | "256": "chrome", 909 | "257": "chrome", 910 | "254": "chrome", 911 | "255": "chrome", 912 | "499": "chrome", 913 | "157": "chrome", 914 | "156": "chrome", 915 | "939": "safari", 916 | "731": "chrome", 917 | "730": "chrome", 918 | "733": "chrome", 919 | "938": "safari", 920 | "735": "chrome", 921 | "734": "chrome", 922 | "508": "chrome", 923 | "736": "chrome", 924 | "506": "chrome", 925 | "738": "chrome", 926 | "504": "chrome", 927 | "505": "chrome", 928 | "502": "chrome", 929 | "503": "chrome", 930 | "500": "chrome", 931 | "501": "chrome", 932 | "630": "chrome", 933 | "631": "chrome", 934 | "632": "chrome", 935 | "633": "chrome", 936 | "469": "chrome", 937 | "468": "chrome", 938 | "636": "chrome", 939 | "637": "chrome", 940 | "465": "chrome", 941 | "464": "chrome", 942 | "467": "chrome", 943 | "466": "chrome", 944 | "461": "chrome", 945 | "900": "firefox", 946 | "463": "chrome", 947 | "462": "chrome", 948 | "901": "firefox", 949 | "168": "chrome", 950 | "169": "chrome", 951 | "164": "chrome", 952 | "165": "chrome", 953 | "166": "chrome", 954 | "167": "chrome", 955 | "160": "chrome", 956 | "161": "chrome", 957 | "162": "chrome", 958 | "163": "chrome", 959 | "964": "safari", 960 | "965": "safari", 961 | "966": "safari", 962 | "967": "safari", 963 | "960": "safari", 964 | "961": "safari", 965 | "962": "safari", 966 | "963": "safari", 967 | "783": "internetexplorer", 968 | "968": "safari", 969 | "969": "opera", 970 | "936": "firefox", 971 | "935": "firefox", 972 | "934": "firefox", 973 | "908": "firefox", 974 | "909": "firefox", 975 | "722": "chrome", 976 | "426": "chrome", 977 | "878": "firefox", 978 | "879": "firefox", 979 | "876": "firefox", 980 | "877": "firefox", 981 | "874": "firefox", 982 | "875": "firefox", 983 | "872": "firefox", 984 | "873": "firefox", 985 | "870": "firefox", 986 | "871": "firefox", 987 | "9": "chrome", 988 | "890": "firefox", 989 | "891": "firefox", 990 | "892": "firefox", 991 | "893": "firefox", 992 | "894": "firefox", 993 | "647": "chrome", 994 | "896": "firefox", 995 | "897": "firefox", 996 | "898": "firefox", 997 | "899": "firefox", 998 | "646": "chrome", 999 | "649": "chrome", 1000 | "648": "chrome", 1001 | "357": "chrome", 1002 | "356": "chrome", 1003 | "809": "internetexplorer", 1004 | "808": "internetexplorer", 1005 | "353": "chrome", 1006 | "352": "chrome", 1007 | "351": "chrome", 1008 | "350": "chrome", 1009 | "803": "internetexplorer", 1010 | "802": "internetexplorer", 1011 | "801": "internetexplorer", 1012 | "800": "internetexplorer", 1013 | "807": "internetexplorer", 1014 | "806": "internetexplorer", 1015 | "805": "internetexplorer", 1016 | "804": "internetexplorer", 1017 | "216": "chrome", 1018 | "217": "chrome", 1019 | "768": "chrome", 1020 | "769": "chrome", 1021 | "212": "chrome", 1022 | "213": "chrome", 1023 | "210": "chrome", 1024 | "211": "chrome", 1025 | "762": "chrome", 1026 | "763": "chrome", 1027 | "760": "chrome", 1028 | "761": "chrome", 1029 | "766": "chrome", 1030 | "767": "chrome", 1031 | "764": "chrome", 1032 | "765": "chrome", 1033 | "40": "chrome", 1034 | "41": "chrome", 1035 | "289": "chrome", 1036 | "288": "chrome", 1037 | "4": "chrome", 1038 | "281": "chrome", 1039 | "280": "chrome", 1040 | "283": "chrome", 1041 | "282": "chrome", 1042 | "285": "chrome", 1043 | "284": "chrome", 1044 | "287": "chrome", 1045 | "286": "chrome", 1046 | "678": "chrome", 1047 | "679": "chrome", 1048 | "674": "chrome", 1049 | "675": "chrome", 1050 | "676": "chrome", 1051 | "677": "chrome", 1052 | "670": "chrome", 1053 | "671": "chrome", 1054 | "672": "chrome", 1055 | "673": "chrome", 1056 | "263": "chrome", 1057 | "262": "chrome", 1058 | "261": "chrome", 1059 | "260": "chrome", 1060 | "267": "chrome", 1061 | "266": "chrome", 1062 | "265": "chrome", 1063 | "264": "chrome", 1064 | "269": "chrome", 1065 | "268": "chrome", 1066 | "59": "chrome", 1067 | "58": "chrome", 1068 | "55": "chrome", 1069 | "54": "chrome", 1070 | "57": "chrome", 1071 | "56": "chrome", 1072 | "51": "chrome", 1073 | "258": "chrome", 1074 | "53": "chrome", 1075 | "52": "chrome", 1076 | "537": "chrome", 1077 | "536": "chrome", 1078 | "535": "chrome", 1079 | "63": "chrome", 1080 | "533": "chrome", 1081 | "532": "chrome", 1082 | "531": "chrome", 1083 | "530": "chrome", 1084 | "152": "chrome", 1085 | "539": "chrome", 1086 | "538": "chrome", 1087 | "775": "internetexplorer", 1088 | "774": "internetexplorer", 1089 | "982": "opera", 1090 | "983": "opera", 1091 | "980": "opera", 1092 | "981": "opera", 1093 | "777": "internetexplorer", 1094 | "984": "opera", 1095 | "50": "chrome", 1096 | "115": "chrome", 1097 | "252": "chrome", 1098 | "117": "chrome", 1099 | "776": "internetexplorer", 1100 | "111": "chrome", 1101 | "110": "chrome", 1102 | "113": "chrome", 1103 | "69": "chrome", 1104 | "771": "chrome", 1105 | "119": "chrome", 1106 | "118": "chrome", 1107 | "770": "chrome", 1108 | "773": "internetexplorer", 1109 | "772": "internetexplorer", 1110 | "429": "chrome", 1111 | "428": "chrome", 1112 | "534": "chrome", 1113 | "919": "firefox", 1114 | "918": "firefox", 1115 | "915": "firefox", 1116 | "914": "firefox", 1117 | "917": "firefox", 1118 | "916": "firefox", 1119 | "911": "firefox", 1120 | "910": "firefox", 1121 | "913": "firefox", 1122 | "912": "firefox", 1123 | "308": "chrome", 1124 | "309": "chrome", 1125 | "855": "firefox", 1126 | "300": "chrome", 1127 | "301": "chrome", 1128 | "302": "chrome", 1129 | "303": "chrome", 1130 | "304": "chrome", 1131 | "305": "chrome", 1132 | "306": "chrome", 1133 | "307": "chrome", 1134 | "895": "firefox", 1135 | "825": "firefox", 1136 | "824": "firefox", 1137 | "827": "firefox", 1138 | "847": "firefox", 1139 | "846": "firefox", 1140 | "845": "firefox", 1141 | "844": "firefox", 1142 | "843": "firefox", 1143 | "842": "firefox", 1144 | "841": "firefox", 1145 | "840": "firefox", 1146 | "821": "firefox", 1147 | "853": "firefox", 1148 | "849": "firefox", 1149 | "848": "firefox", 1150 | "823": "firefox", 1151 | "822": "firefox", 1152 | "240": "chrome", 1153 | "390": "chrome", 1154 | "732": "chrome", 1155 | "753": "chrome", 1156 | "752": "chrome", 1157 | "751": "chrome", 1158 | "750": "chrome", 1159 | "757": "chrome", 1160 | "756": "chrome", 1161 | "755": "chrome", 1162 | "754": "chrome", 1163 | "560": "chrome", 1164 | "561": "chrome", 1165 | "759": "chrome", 1166 | "758": "chrome", 1167 | "564": "chrome", 1168 | "565": "chrome", 1169 | "566": "chrome", 1170 | "701": "chrome", 1171 | "739": "chrome", 1172 | "229": "chrome", 1173 | "507": "chrome", 1174 | "227": "chrome", 1175 | "226": "chrome", 1176 | "225": "chrome", 1177 | "224": "chrome", 1178 | "223": "chrome", 1179 | "222": "chrome", 1180 | "221": "chrome", 1181 | "220": "chrome", 1182 | "114": "chrome", 1183 | "391": "chrome", 1184 | "726": "chrome", 1185 | "727": "chrome", 1186 | "724": "chrome", 1187 | "725": "chrome", 1188 | "568": "chrome", 1189 | "723": "chrome", 1190 | "720": "chrome", 1191 | "721": "chrome", 1192 | "728": "chrome", 1193 | "729": "chrome", 1194 | "605": "chrome", 1195 | "604": "chrome", 1196 | "607": "chrome", 1197 | "606": "chrome", 1198 | "601": "chrome", 1199 | "600": "chrome", 1200 | "603": "chrome", 1201 | "602": "chrome", 1202 | "159": "chrome", 1203 | "158": "chrome", 1204 | "112": "chrome", 1205 | "609": "chrome", 1206 | "608": "chrome", 1207 | "976": "opera", 1208 | "634": "chrome", 1209 | "399": "chrome", 1210 | "635": "chrome", 1211 | "959": "safari", 1212 | "958": "safari", 1213 | "398": "chrome", 1214 | "48": "chrome", 1215 | "49": "chrome", 1216 | "951": "safari", 1217 | "950": "safari", 1218 | "953": "safari", 1219 | "952": "safari", 1220 | "42": "chrome", 1221 | "954": "safari", 1222 | "957": "safari", 1223 | "956": "safari", 1224 | "638": "chrome", 1225 | "5": "chrome", 1226 | "639": "chrome", 1227 | "460": "chrome", 1228 | "489": "chrome", 1229 | "488": "chrome", 1230 | "487": "chrome", 1231 | "486": "chrome", 1232 | "485": "chrome", 1233 | "484": "chrome", 1234 | "483": "chrome", 1235 | "482": "chrome", 1236 | "481": "chrome", 1237 | "480": "chrome", 1238 | "509": "chrome", 1239 | "955": "safari", 1240 | "472": "chrome", 1241 | "473": "chrome", 1242 | "470": "chrome", 1243 | "471": "chrome", 1244 | "476": "chrome", 1245 | "477": "chrome", 1246 | "474": "chrome", 1247 | "475": "chrome", 1248 | "478": "chrome", 1249 | "479": "chrome" 1250 | } 1251 | } -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import itchat 5 | from apscheduler.schedulers.blocking import BlockingScheduler 6 | from utils import (is_online, login) 7 | from api import (get_one_info_v1, get_weather_v1) 8 | from config import config 9 | import logging 10 | 11 | # 日志基本设置 12 | logging.basicConfig(level=logging.INFO, 13 | format=config['logging_format']) 14 | 15 | 16 | def send_today_info(): 17 | """ 18 | 发送当天的信息 19 | :return: 20 | """ 21 | # 获取天气 22 | weather_info = get_weather_v1(config['city']) 23 | # 获取一言 24 | one_info = get_one_info_v1() 25 | 26 | if is_online(auto_login=True): 27 | # 获取好友列表 28 | itchat.get_friends(update=True) 29 | # 查找好友 30 | girl_friend = itchat.search_friends(name=config['girl_friend'])[0] 31 | # 发送消息 32 | itchat.send(weather_info + one_info, toUserName=girl_friend['UserName']) 33 | logging.info('发送成功') 34 | 35 | 36 | def start(): 37 | # 先登录一次,用于保存登录信息 38 | login() 39 | # 定时任务 40 | scheduler = BlockingScheduler() 41 | # 每天定时发送天气信息 42 | scheduler.add_job(send_today_info, 'cron', hour=config['hour'], minute=config['minute'], 43 | misfire_grace_time=config['grace_time']) 44 | # 启动定时任务 45 | scheduler.start() 46 | 47 | 48 | if __name__ == '__main__': 49 | start() 50 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | APScheduler==3.6.0 2 | itchat==1.3.10 3 | requests==2.22.0 4 | simplejson==3.16.0 5 | fake-useragent==0.1.11 6 | beautifulsoup4==4.7.1 7 | lxml==4.3.4 8 | -------------------------------------------------------------------------------- /template.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | from string import Template 4 | import os 5 | 6 | """ 7 | 天气模板 8 | # 今天是 2019-6-11 星期二 9 | # 北京的天气:晴 10 | # 最高气温 32 ℃ 11 | # 最低气温 16 ℃ 12 | # 空气质量:良好 13 | # 有东南风 3-4级转<3级 14 | """ 15 | weather_template = Template("今天是 $date $week" + os.linesep + 16 | "$city:$wea" + os.linesep + 17 | "最高气温:$high" + os.linesep + 18 | "最低气温:$low" + os.linesep + 19 | "空气质量:$quality" + os.linesep + 20 | "有$win $win_speed" + os.linesep) 21 | 22 | weather_template_v1 = Template("$hello啊,兔子🐰!" + os.linesep + 23 | os.linesep + "今天是 $date" + os.linesep + 24 | os.linesep + "下面为你播报$city的天气🌡️" + os.linesep + 25 | "$day白天$day_wea,有$day_win💨 $day_win_speed,最高气温为 $high" + os.linesep + 26 | "$day晚间$night_wea,有$night_win💨 $night_win_speed,最低气温为 $low" + os.linesep + os.linesep) 27 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | from simplejson import JSONDecodeError 4 | import itchat 5 | import os 6 | import logging 7 | import datetime 8 | 9 | 10 | def is_json(response): 11 | """ 12 | 判断数据能否解析成 Json 格式 13 | :param response: 14 | :return: 15 | """ 16 | try: 17 | response.json() 18 | return True 19 | except JSONDecodeError: 20 | return False 21 | 22 | 23 | def get_json(response): 24 | """ 25 | 获取 json 26 | :param response: 27 | :return: 28 | """ 29 | if response.status_code == 200 and is_json(response): 30 | return response.json() 31 | else: 32 | logging.warning('获取信息失败') 33 | 34 | 35 | def is_online(auto_login=False): 36 | """ 37 | 判断是否还在线。 38 | :param auto_login: bool,如果掉线了则自动登录(默认为 False) 39 | :return: 40 | """ 41 | 42 | def _online(): 43 | """ 44 | 通过获取好友信息,判断用户是否还在线 45 | :return: 46 | """ 47 | try: 48 | if itchat.search_friends(): 49 | return True 50 | except IndexError: 51 | return False 52 | return True 53 | 54 | if _online(): 55 | return True 56 | # 仅仅判断是否在线 57 | if not auto_login: 58 | return _online() 59 | 60 | # 尝试登录 5 次 61 | for _ in range(5): 62 | login() 63 | if _online(): 64 | logging.info('登录成功') 65 | return True 66 | logging.info('登录成功') 67 | return False 68 | 69 | 70 | def login(): 71 | """ 72 | 登录微信 73 | :return: 74 | """ 75 | # 命令行显示登录二维码 76 | if os.environ.get('MODE') == 'server': 77 | itchat.auto_login(enableCmdQR=2, hotReload=True) 78 | else: 79 | itchat.auto_login(hotReload=True) 80 | 81 | 82 | def say_hello(): 83 | """ 84 | 根据时间输出 hello 85 | :return: 86 | """ 87 | hour = datetime.datetime.now().hour 88 | if hour < 11: 89 | return '早上好' 90 | elif 11 <= hour < 13: 91 | return '中午好' 92 | elif 13 <= hour < 19: 93 | return '下午好' 94 | else: 95 | return '晚上好' 96 | --------------------------------------------------------------------------------