Repository: python-cn/slack_bot Branch: master Commit: 713f8431eedc Files: 39 Total size: 190.3 KB Directory structure: gitextract_wzu9i0ah/ ├── .gitignore ├── LICENSE ├── Procfile ├── README.md ├── manage.py ├── requirements.txt ├── runtime.txt ├── slack_bot/ │ ├── __init__.py │ ├── app.py │ ├── ext.py │ ├── local_settings.py.example │ ├── plugins/ │ │ ├── __init__.py │ │ ├── airpollution.py │ │ ├── baidumap.py │ │ ├── bj_bus.py │ │ ├── consts.py │ │ ├── data/ │ │ │ ├── baidu_tag.pkl │ │ │ ├── bjbus_lines.pkl │ │ │ └── cityid │ │ ├── dianping.py │ │ ├── earthquake.py │ │ ├── events.py │ │ ├── github_issue.py │ │ ├── help.py │ │ ├── movie.py │ │ ├── orz.py │ │ ├── pycoders.py │ │ ├── pythonweekly.py │ │ ├── qiubai.py │ │ ├── simsimi.py │ │ ├── toutiao.py │ │ ├── travel.py │ │ ├── utils.py │ │ ├── v2ex.py │ │ ├── weather.py │ │ └── wikipedia.py │ ├── settings.py │ └── utils.py └── wsgi.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover # Translations *.mo *.pot # Django stuff: *.log # Sphinx documentation docs/_build/ # PyBuilder target/ slack_bot/local_settings.py *~ ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2015 小明 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Procfile ================================================ web: gunicorn wsgi:app --timeout 240 --log-file - ================================================ FILE: README.md ================================================ # slack\_bot 立志成为一个可被调戏且有用的Bot ### 介绍 很多人听过甚至曾经用过[小黄鸡](https://github.com/wong2/xiaohuangji-new). 你可以把本bot理解为`增加了很多功能`, `只保留小黄鸡交流的基本逻辑`, `用于slack`channel里面的`小黄鸡`. 它主要借用slack的[Outgoing Webhooks](https://api.slack.com/outgoing-webhooks), 也使用了[私聊](https://api.slack.com/methods/chat.postMessage)和[upload](https://api.slack.com/methods/files.upload). 项目使用flask, 目前本项目是一个heroku应用. 地址是 https://slack-bot2.herokuapp.com/slack_callback 但是你也可以直接裸跑 ```python gunicorn wsgi:app localhost:5000 --timeout 240 --log-file - ``` ### 我们使用slack的特性 1. 可以把消息私聊发给自己 2. 可以使用带图的方式接收结果(支持canvas, 以下会看到例图) ### 模块用途 继承自小黄鸡的模块们, 但是都做了对应的修改: 1. 空气插件 2. wikipedia 3. 地震了 4. 糗百 5. orz 新加的模块们: #### 地图插件 - 你可以输入我想从哪去哪, 会给你个路线(步行/开车/公交) ![](screenshots/map.png) ![](screenshots/map2.png) #### 天气插件 - 使用了百度api, 获得城市的天气情况 ![](screenshots/weather.png) #### 北京公交插件 - 可以查询北京公交线路, 获取实时的到某站的信息(有些线路站点不准) ![](screenshots/bus.png) ![](screenshots/bus2.png) #### 美食插件 - 使用大众点评网api, 获取附近餐饮信息, 评分, 电话地址,距离等等 ![](screenshots/dianping.png) #### 技术活动插件 - 从segmentfault/csdn/车库咖啡/活动行获得最近的活动列表 ![](screenshots/events.png) #### Github\_issue插件 - 获得你个人或者组织下未处理的Pull requests列表 ![](screenshots/issue.png) #### 电影信息插件 - 列出最近上映和即将上映的电影信息 ![](screenshots/movie.png) #### pycoders插件 - 获得订阅数据 ![](screenshots/pycoders.png) #### pythonweekly插件 - 获得订阅数据 ![](screenshots/pythonweekly.png) #### 头条插件 - 获得今日头条新闻 ![](screenshots/toutiao.png) #### travel插件 - 旅游推荐/景点介绍 ![](screenshots/travel.png) ![](screenshots/travel2.png) #### v2ex feed插件 - 获得一些节点的最新feed ![](screenshots/v2ex.png) #### help插件 - 列出所有插件的帮助信息 ![](screenshots/help.png) #### 最主要的是小黄鸡(simsim) ![](screenshots/simsim.png) #### 也可以直接发到个人的slackbot channel里: ![](screenshots/direct.png) ![](screenshots/direct2.png) ### 提交pull request 我们欢迎你把你想要的idea实现出来, 或者在看过本项目代码后用于个人以及私有公司的插件遇到bug, 发现瓶颈等时候 给我们PR ### 插件编写 插件放在plugins目录下,每个插件是一个python文件,提供两个接口,`test`和`handle`,格式如下: ```python def test(data): // your code ``` `test`方法返回`True`或`False`,说明是否要用该插件处理这一条请求 ```python def handle(data, **kwargs): // your code ``` `handle`方法则实际处理请求,它需要返回一个utf-8编码的字符串或者一个tuple,用来作为小黄鸡对这条请求的答复: 1. 返回只包含一个字符串表示不支持带图模式 2. 返回一个(字符串, 一个attachment的列表), 每个attachment可以使用plugins/utils.py的 `gen_attachment` 生成 `data` 是一个dict, 它是slack在回调的时候的请求, 一般情况下你只需要关注`data['message']`这个`消息全文`字段. 注意事项: 1. 请把新的插件的名字也加在plugins/\_\_init\_\_.py的 `__all__` 里面 2. 如果其他插件都不符合, 会默认使用小黄鸡接口 3. 本地调试可以使用这样的http请求: ``` http -f POST http://localhost:5000/slack_callback token=jLGMzrZn3P1lS2sD848KpPuN text='颐和园景点介绍' team_id=T0001 team_domain=example channel_id=C2147483705 channel_name=test timestamp=1355517523.000005 user_id=U2147483697 user_name=Steve trigger_word='' ``` 4. 你也可以这样调试: ``` $python manage.py send 今天天气很不错 !是啊是啊 好想出去玩 ``` ### TODO - [ ] 输入xx有什么可玩的 - [ ] 今天中午吃什么 - [x] 输入我想从哪去哪, 调用地图api.给个路线 - [x] 附近有什么可吃的(大众点评) - [x] 最近都有神马技术聚会 - [x] Pycoders Weekly & Python Weekly 汇总 - [x] 今日头条 - [x] 公交车离我还有多久/远 - [x] v2ex feed - [x] github上的issue列表 - [x] 最近(将)上映的电影(豆瓣电影) - [x] 旅游路线推荐/景点介绍 ### Pending 1. 打车 2. 叫快递 3. 叫外卖 ================================================ FILE: manage.py ================================================ # coding=utf-8 import json from pprint import pprint from flask import current_app from flask_script import Manager, Server from slack_bot.app import create_app manager = Manager(create_app) manager.add_option('-c', '--config', dest='config', required=False) manager.add_command( 'runserver', Server(use_debugger=True, use_reloader=True, host='0.0.0.0') ) @manager.option('text') def send(text): """Send text to slack callback url""" data = current_app.config['TEST_DATA'] uri = current_app.config['SLACK_CALLBACK'] client = current_app.test_client() data['text'] = text rv = client.post(uri, data=data) if rv.status_code == 200: body = rv.data if not body: print('Response body is empty!') return obj = json.loads(body) if not obj.get('attachments'): obj = obj['text'] print(obj) else: pprint(obj) else: print('Error!\nstatus code: %s\nbody: %s' % (rv.status_code, rv.data)) if __name__ == '__main__': manager.run() ================================================ FILE: requirements.txt ================================================ flask requests lxml pytz gunicorn Flask-Cache flask-redis Flask-Script jieba pypinyin beautifulsoup4 flask-slackbot==0.2.1 ================================================ FILE: runtime.txt ================================================ python-2.7.9 ================================================ FILE: slack_bot/__init__.py ================================================ ================================================ FILE: slack_bot/app.py ================================================ # coding=utf-8 import os import re from flask import Flask from flask_slackbot import SlackBot import settings import plugins from ext import redis_store, cache from utils import timeout from plugins.utils import convert2str, replaced plugin_modules = [] for plugin_name in plugins.__all__: __import__('slack_bot.plugins.%s' % plugin_name) plugin_modules.append(getattr(plugins, plugin_name)) def create_app(config=None): app = Flask(__name__) app.config.from_object(settings) if isinstance(config, dict): app.config.update(config) elif config: app.config.from_pyfile(os.path.realpath(config)) redis_store.init_app(app) cache.init_app(app) app.cache = cache app.plugin_modules = plugin_modules slackbot = SlackBot(app) slackbot.set_handler(callback) slackbot.filter_outgoing(_filter) return app def callback(kwargs): s = convert2str(kwargs['text']) trigger_word = convert2str(kwargs['trigger_word']) # remove trigger_words if trigger_word is not None: s = replaced(s, trigger_word.split(',')) # remove metion block s = re.sub(r'(@.*?)\W', '', s) private = any([word in s for word in ['private', '私聊']]) attachmented = any([word in s for word in ['带图', '附件']]) data = { 'message': replaced(s, ['private', '私聊', '带图', '附件']).strip() } if not data['message']: return {'text': ''} for plugin_module in plugin_modules: if plugin_module.test(data): ret = plugin_module.handle(data) if not isinstance(ret, tuple): text = ret attaches = None else: text, attaches = ret if trigger_word is None: text = '!' + text if attachmented and attaches: return {'text': ' ', 'private': private, 'attachments': attaches} return {'text': text, 'private': private} return {'text': '!呵呵'} def _filter(line): return line.startswith('!') if __name__ == '__main__': app = create_app() app.debug = True app.run() ================================================ FILE: slack_bot/ext.py ================================================ # coding=utf-8 from flask_redis import FlaskRedis from flask_cache import Cache redis_store = FlaskRedis() cache = Cache() ================================================ FILE: slack_bot/local_settings.py.example ================================================ # coding=utf-8 DEBUG = False SECRET_KEY = 'your secert key' SLACK_CHAT_TOKEN = 'your slack char token' SLACK_CALLBACK = 'your slack bot callback uri' REDIS_URL = 'redis://localhost:6379/0' ORG_NAME = 'your organization slug' BAIDU_AK = 'your baidu ak' SIMSIMI_KEY = 'your simsimi key' CACHE_TYPE = 'simple' TEST_DATA = { 'token': 'token', 'text': 'text', 'team_id': 'team_id', 'team_domain': 'team_domain', 'channel_id': 'channel_id', 'channel_name': 'channel_name', 'timestamp': 'timestamp', 'user_id': 'user_id', 'user_name': 'user_name', 'trigger_word': 'trigger_word', } ================================================ FILE: slack_bot/plugins/__init__.py ================================================ # coding=utf-8 __all__ = [ 'help', 'github_issue', 'baidumap', 'bj_bus', 'pycoders', 'v2ex', 'toutiao', 'movie', 'events', 'dianping', 'pythonweekly', 'wikipedia', 'qiubai', 'earthquake', 'travel', 'airpollution', 'weather', 'orz', 'simsimi', ] ================================================ FILE: slack_bot/plugins/airpollution.py ================================================ #!/usr/bin/env python # -*-coding:utf-8-*- """ Copyright (c) 2012 Qijiang Fan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ # 空气污染 import requests import json from bs4 import BeautifulSoup from slack_bot.ext import cache from utils import gen_attachment description = """ 空气质量, 触发条件: "[城市名] 空气 [私聊] [带图]",比如: * 空气 * 天津空气 """ city = json.loads( """[["\u5317\u4eac", "Beijing"], ["\u5929\u6d25", "Tianjin"], ["\u4e0a\u6d77", "Shanghai"], ["\u91cd\u5e86", "Chongqing"], ["\u77f3\u5bb6\u5e84", "Shijiazhuang"], ["\u5510\u5c71", "Tangshan"], ["\u79e6\u7687\u5c9b", "Qinhuangdao"], ["\u90af\u90f8", "Handan"], ["\u4fdd\u5b9a", "Baoding"], ["\u90a2\u53f0", "Xingtai"], ["\u5f20\u5bb6\u53e3", "Zhangjiakou"], ["\u627f\u5fb7", "Chengde"], ["\u5eca\u574a", "Cangzhou"], ["\u5eca\u574a", "Langfang"], ["\u8861\u6c34", "Hengshui"], ["\u592a\u539f", "Taiyuan"], ["\u5927\u540c", "Datong"], ["\u9633\u6cc9", "Yangquan"], ["\u957f\u6cbb", "Changzhi"], ["\u4e34\u6c7e", "Linfen"], ["\u547c\u548c\u6d69\u7279", "Huhehaote"], ["\u5305\u5934", "Baotou"], ["\u8d64\u5cf0", "Chifeng"], ["\u6c88\u9633", "Shenyang"], ["\u5927\u8fde", "Dalian"], ["\u978d\u5c71", "Anshan"], ["\u629a\u987a", "Fushun"], ["\u672c\u6eaa", "Benxi"], ["\u9526\u5dde", "Jinzhou"], ["\u957f\u6625", "Changchun"], ["\u5409\u6797", "Jilin"], ["\u54c8\u5c14\u6ee8", "Haerbin"], ["\u9f50\u9f50\u54c8\u5c14", "Qiqihaer"], ["\u5927\u5e86", "Daqing"], ["\u7261\u4e39\u6c5f", "Mudanjiang"], ["\u5357\u4eac", "Nanjing"], ["\u65e0\u9521", "Wuxi"], ["\u5f90\u5dde", "Xuzhou"], ["\u5e38\u5dde", "Changzhou"], ["\u82cf\u5dde", "Suzhou"], ["\u5357\u901a", "Nantong"], ["\u8fde\u4e91\u6e2f", "Lianyungang"], ["\u626c\u5dde", "Yangzhou"], ["\u9547\u6c5f", "Zhenjiang"], ["\u6dee\u5b89", "Huaian"], ["\u76d0\u57ce", "Yancheng"], ["\u53f0\u5dde", "Taizhou"], ["\u5bbf\u8fc1", "Suqian"], ["\u676d\u5dde", "Hangzhou"], ["\u5b81\u6ce2", "Ningbo"], ["\u6e29\u5dde", "Wenzhou"], ["\u5609\u5174", "Jiaxing"], ["\u6e56\u5dde", "Huzhou"], ["\u7ecd\u5174", "Shaoxing"], ["\u91d1\u534e", "Jinhua"], ["\u8862\u5dde", "Quzhou"], ["\u821f\u5c71", "Zhoushan"], ["\u4e3d\u6c34", "Lishui"], ["\u5408\u80a5", "Hefei"], ["\u829c\u6e56", "Wuhu"], ["\u9a6c\u978d\u5c71", "Maanshan"], ["\u798f\u5dde", "Fuzhou"], ["\u53a6\u95e8", "Xiamen"], ["\u6cc9\u5dde", "Quanzhou"], ["\u5357\u660c", "Nanchang"], ["\u4e5d\u6c5f", "Jiujiang"], ["\u6d4e\u5357", "Jinan"], ["\u9752\u5c9b", "Qingdao"], ["\u6dc4\u535a", "Zibo"], ["\u67a3\u5e84", "Zaozhuang"], ["\u70df\u53f0", "Yantai"], ["\u6f4d\u574a", "Weifang"], ["\u6d4e\u5b81", "Jining"], ["\u6cf0\u5b89", "Taian"], ["\u5a01\u6d77", "Weihai"], ["\u65e5\u7167", "Rizhao"], ["\u4e1c\u8425", "Dongying"], ["\u83b1\u829c", "Laiwu"], ["\u4e34\u6c82", "Linyi"], ["\u5fb7\u5dde", "Dezhou"], ["\u804a\u57ce", "Liaocheng"], ["\u6ee8\u5dde", "Binzhou"], ["\u83cf\u6cfd", "Heze"], ["\u90d1\u5dde", "Zhengzhou"], ["\u5f00\u5c01", "Kaifeng"], ["\u6d1b\u9633", "Luoyang"], ["\u5e73\u9876\u5c71", "Pingdingshan"], ["\u5b89\u9633", "Anyang"], ["\u7126\u4f5c", "Jiaozuo"], ["\u4e09\u95e8\u5ce1", "Sanmenxia"], ["\u6b66\u6c49", "Wuhan"], ["\u5b9c\u660c", "Yichang"], ["\u8346\u5dde", "Jingzhou"], ["\u957f\u6c99", "Changsha"], ["\u682a\u6d32", "Zhuzhou"], ["\u6e58\u6f6d", "Xiangtan"], ["\u5cb3\u9633", "Yueyang"], ["\u5e38\u5fb7", "Changde"], ["\u5f20\u5bb6\u754c", "Zhangjiajie"], ["\u5e7f\u5dde", "Guangzhou"], ["\u97f6\u5173", "Shaoguan"], ["\u6df1\u5733", "Shenzhen"], ["\u73e0\u6d77", "Zhuhai"], ["\u6c55\u5934", "Shantou"], ["\u4f5b\u5c71", "Foshan"], ["\u6e5b\u6c5f", "Zhanjiang"], ["\u4e2d\u5c71", "Zhongshan"], ["\u6c5f\u95e8", "Jiangmen"], ["\u8087\u5e86", "Zhaoqing"], ["\u4e1c\u839e", "Dongguan"], ["\u60e0\u5dde", "Huizhou"], ["\u987a\u5fb7", "Shunde"], ["\u5357\u5b81", "Nanning"], ["\u67f3\u5dde", "Liuzhou"], ["\u6842\u6797", "Guilin"], ["\u5317\u6d77", "Beihai"], ["\u6d77\u53e3", "Haikou"], ["\u4e09\u4e9a", "Sanya"], ["\u6210\u90fd", "Chengdu"], ["\u81ea\u8d21", "Zigong"], ["\u6500\u679d\u82b1", "Panzhihua"], ["\u6cf8\u5dde", "Luzhou"], ["\u5fb7\u9633", "Deyang"], ["\u7ef5\u9633", "Mianyang"], ["\u5357\u5145", "Nanchong"], ["\u5b9c\u5bbe", "Yibin"], ["\u8d35\u9633", "Guiyang"], ["\u9075\u4e49", "Zunyi"], ["\u6606\u660e", "Kunming"], ["\u66f2\u9756", "Qujing"], ["\u7389\u6eaa", "Yuxi"], ["\u62c9\u8428", "Lhasa"], ["\u897f\u5b89", "Xian"], ["\u94dc\u5ddd", "Tongchuan"], ["\u5b9d\u9e21", "Baoji"], ["\u54b8\u9633", "Xianyang"], ["\u6e2d\u5357", "Weinan"], ["\u5ef6\u5b89", "Yanan"], ["\u5170\u5dde", "Lanzhou"], ["\u91d1\u660c", "Jinchang"], ["\u897f\u5b81", "Xining"], ["\u94f6\u5ddd", "Yinchuan"], ["\u77f3\u5634\u5c71", "Shizuishan"], ["\u4e4c\u9c81\u6728\u9f50", "Wulumuqi"], ["\u514b\u62c9\u739b\u4f9d", "Karamay"]]""") # noqa headers = {'Referer': 'http://aqicn.org/city/beijing/cn/', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36'} # noqa def test(data): message = data['message'] if '空气' not in message: return False req = filter(lambda p: p[0].encode('utf-8') in message, city) return len(req) > 0 def get_desc(cityname, cityshort): if cache is not None: r = cache.get('airpollution.%s' % (cityshort)) if r: return r title_link = 'http://aqicn.org/city/{}/cn/'.format(cityshort.lower()) r = requests.get(title_link, headers=headers) r.encoding = 'utf-8' p = r.text soup = BeautifulSoup(p) aqiwgtinfo = soup.find(id="aqiwgtinfo'").text aqivalue = soup.find("div", {'class': 'aqivalue'}).text min_pm25 = soup.find(id='min_pm25').text max_pm25 = soup.find(id='max_pm25').text text = '{0}实时空气质量指数(AQI): {1} {2} [最大:{3}, 最小:{4}]'.format( cityname.encode('utf-8'), aqiwgtinfo.encode('utf-8'), aqivalue, max_pm25, min_pm25) if cache is not None: cache.set('airpollution.%s' % (cityshort), text, 1800) image_url = soup.find(id='tr_pm25').find(id='td_pm25').find( 'img').attrs.get('src') title = soup.find('title').text attaches = [gen_attachment(text, image_url, title=title, title_link=title_link)] return text, attaches def handle(data): message = data['message'] reqs = filter(lambda p: p[0].encode('utf-8') in message, city) req = reqs[0] try: return get_desc(req[0], req[1]) except Exception as e: print 'Error: {}'.format(e) return '空气查询失败, 请重试!', [] if __name__ == '__main__': print handle({'message': '北京空气'}) ================================================ FILE: slack_bot/plugins/baidumap.py ================================================ # coding=utf-8 # 百度地图 import os import re import cPickle as pickle from datetime import datetime from flask import current_app as app import requests from utils import to_pinyin description = """ 路线规划, 触发条件: "从 地名 到|去 地名 [出行方式] [私聊]"。比如: 我想从兆维工业园到北京南站 步行 """ HERE = os.path.abspath(os.path.dirname(__file__)) REGEX = re.compile(ur'从(\w+)[\u53bb|\u5230](\w+)', re.UNICODE) HTML_REGEX = re.compile(r'(<.*?>)') SUGGESTION_API = 'http://api.map.baidu.com/place/v2/suggestion' DIRECTION_API = 'http://api.map.baidu.com/direction/v1' GEOCODING_API = 'http://api.map.baidu.com/geocoder/v2/' POINT_API = 'http://api.map.baidu.com/telematics/v3/point' TRAVEL_ATTRACTIONS_API = 'http://api.map.baidu.com/telematics/v3/travel_attractions' # noqa TRAVEL_CITY_API = 'http://api.map.baidu.com/telematics/v3/travel_city' LOCAL_API = 'http://api.map.baidu.com/telematics/v3/local' WEATHER_API = 'http://api.map.baidu.com/telematics/v3/weather' DIRECTION = 0 NODIRECTION = 1 NOSCHEME = 2 TagList = pickle.load( open(os.path.join(HERE, 'data' + os.path.sep + 'baidu_tag.pkl'), 'rb')) def address2geo(ak, address, city=u'北京'): res = requests.get(GEOCODING_API, params={ 'city': city, 'address': address, 'ak': ak, 'output': 'json'}) data = res.json() if data['status']: # 一般是无相关结果 return False if not data['result']['precise'] and data['result']['confidence'] <= 50: # 可信度太低, 需要确认 return False return data['result']['location'] def geo2address(ak, location): res = requests.get(GEOCODING_API, params={ 'location': location, 'ak': ak, 'output': 'json'}) data = res.json() if data['status']: return False return data['result']['formatted_address'] def place_suggestion(ak, pos): res = requests.get(SUGGESTION_API, params={ 'query': pos, 'region': 131, 'ak': ak, 'output': 'json'}) return [r['name'] for r in res.json()['result']] def place_direction(ak, origin, destination, mode='transit', tactics=11, region='北京', origin_region='北京', destination_region='北京'): params = { 'origin': origin, 'destination': destination, 'ak': ak, 'output': 'json', 'mode': mode, 'tactics': tactics } if mode != 'transit': params.update({ 'origin_region': origin_region, 'destination_region': destination_region }) else: params.update({'region': region}) res = requests.get(DIRECTION_API, params=params).json() result = res.get('result', []) # type=1起终点模糊 if res['type'] == 1: if not result: return (NOSCHEME, place_suggestion(ak, origin), place_suggestion(ak, destination)) if mode != 'transit': _origin = result['origin']['content'] _dest = result['destination']['content'] else: _origin = result.get('origin', []) _dest = result.get('destination', []) o = ['{0}: {1}'.format( r['name'].encode('utf-8') if r['name'] else '', r['address'].encode('utf-8') if r['address'] else '') for r in _origin] d = ['{0}: {1}'.format( r['name'].encode('utf-8') if r['name'] else '', r['address'].encode('utf-8') if r['address'] else '') for r in _dest] return (NODIRECTION, o, d) # 起终点明确 if mode == 'driving': # 驾车 taxi = result['taxi'] for d in taxi['detail']: if u'白天' in d['desc']: daytime = d else: night = d is_daytime = 5 < datetime.now().hour < 23 price = daytime['total_price'] if is_daytime else night['total_price'] remark = taxi['remark'] taxi_text = u'{0} 预计打车费用 {1}元'.format(remark, price) steps = result['routes'][0]['steps'] steps = [re.sub(HTML_REGEX, '', s['instructions']) for s in steps] return (DIRECTION, '\n'.join(steps), taxi_text) elif mode == 'walking': steps = result['routes'][0]['steps'] steps = [re.sub(HTML_REGEX, '', s['instructions']) for s in steps] return (DIRECTION, '\n'.join(steps), '') else: schemes = result['routes'] steps = [] for index, scheme in enumerate(schemes, 1): scheme = scheme['scheme'][0] step = '*方案{0} [距离: {1}公里, 花费: {2}元, 耗时: {3}分钟]:\n'.format( index, scheme['distance'] / 1000, scheme['price'] / 100, scheme['duration'] / 60) step += '\n'.join([ re.sub(HTML_REGEX, '', s[0]['stepInstruction'].encode('utf-8')) for s in scheme['steps'] ]) step += '\n' + '-' * 40 steps.append(step) return (DIRECTION, steps, '') # 车联网API def point(ak, keyword, city=u'北京'): '''兴趣点查询''' res = requests.get(POINT_API, params={ 'keyword': keyword, 'city': city, 'ak': ak, 'output': 'json'}) data = res.json() return data['pointList'] def travel_attractions(ak, id): '''景点详情''' id = to_pinyin(id) res = requests.get(TRAVEL_ATTRACTIONS_API, params={ 'id': id, 'ak': ak, 'output': 'json'}) data = res.json() if data['error']: return '找不到这个景点' data = res.json()['result'] return '\n'.join([ data['description'], u'票价: ' + data['ticket_info']['price'], u'开放时间: ' + data['ticket_info']['open_time'] ]) def travel_city(ak, location=u'北京', day='all'): '''X日游''' res = requests.get(TRAVEL_CITY_API, params={ 'location': location, 'day': day, 'ak': ak, 'output': 'json'}) return res.json()['result'] def local(ak, tag, keyword, location=u'北京', radius=3000, city=u'北京'): '''周边检索''' res = requests.get(LOCAL_API, params={ 'cityName': city, 'radius': radius, 'tag': tag, 'keyWord': keyword, 'location': location, 'ak': ak, 'output': 'json'}) return res.json()['pointList'] def weather(ak, location=u'北京'): # location可是是城市名, 也可以是geo res = requests.get(WEATHER_API, params={ 'location': location, 'ak': ak, 'output': 'json'}) return res.json()['results'][0]['weather_data'] def test(data): message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') return REGEX.search(message) def handle(data): if app is None: ak = '18691b8e4206238f331ad2e1ca88357e' else: ak = app.config.get('BAIDU_AK') message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') origin, dest = REGEX.search(message).groups() tmpl = '最优路线: {0} {1}' if any([text in message for text in [u'开车', u'驾车']]): mode = 'driving' tmpl = '最优路线: {0} \n[{1}]' elif u'步行' in message: mode = 'walking' else: # 公交 mode = 'transit' result = place_direction(ak, origin, dest, mode) if result[0] == NOSCHEME: text = '\n'.join(['输入的太模糊了, 你要找得起点可以选择:', '|'.join(result[1]), '终点可以选择:', '|'.join(result[2])]) elif result[0] == NODIRECTION: reg = '' if result[1]: reg += '起点' if result[2]: reg += '终点' msg = ['输入的{}太模糊了: 以下是参考:'.format(reg)] + \ result[1] + result[2] text = '\n'.join(msg) else: if isinstance(result[1], list): _result = '\n'.join(result[1]) else: _result = result[1].encode('utf-8') text = tmpl.format(_result, result[2].encode('utf-8')) return text if __name__ == '__main__': print handle({'message': '我想从兆维工业园到北京南站'}) print handle({'message': '我想从人大到北京南站'}) print handle({'message': '我想从人大到豆瓣'}) print handle({'message': '我想从兆维工业园到北京南站 步行'}) print handle({'message': '我想从兆维工业园到北京南站 开车'}) print handle({'message': '从酒仙桥去798'}) ================================================ FILE: slack_bot/plugins/bj_bus.py ================================================ # coding=utf-8 import os import urllib2 import hashlib from datetime import date import cPickle as pickle import lxml.etree as ET from utils import timestamp2str description = """ 北京公交信息, 触发条件: "公交 路数 [当前所在第几站] [私聊]", 比如: * 公交 571 * 公交 571 18 """ URL1 = u'/aiguang/bjgj.c?m=checkUpdate&version=1' URL2 = u'/aiguang/bjgj.c?m=update&id={0}' URL3 = (u'/bus.php?city=%E5%8C%97%E4%BA%AC&id={0}' u'&no={1}&type={2}&encrypt={3}&versionid=2') URL4 = u'http://bjgj.aibang.com:8899' # https://github.com/andelf/beijing-realtime-bus/blob/master/bjgj.py class Cipher(object): __doc__ = u'encrypt & decrypt base64 data' def __init__(self, key): self.key = str(key) @staticmethod def new_from_key(key): return Cipher((u'aibang' + str(key))) def _make_translate_table(self): key_bytes = bytearray(hashlib.md5(self.key).hexdigest(), u'utf-8') ret_val = list(range(256L)) k = 0L m = 0L for i in range(256L): k = (255L & ((k + key_bytes[m]) + ret_val[i])) [ret_val[i], ret_val[k]] = [ret_val[k], ret_val[i]] m = ((1L + m) % len(key_bytes)) return ret_val def translate(self, raw): trans_table = self._make_translate_table() raw_bytes = bytearray(raw) ret_val = bytearray(len(raw_bytes)) j = 0L k = 0L for i in range(len(raw_bytes)): k = (255L & (k + 1L)) j = (255L & (j + trans_table[k])) [trans_table[j], trans_table[k]] = [trans_table[k], trans_table[j]] n = (255L & (trans_table[k] + trans_table[j])) ret_val[i] = (raw_bytes[i] ^ trans_table[n]) return str(ret_val) def decrypt(self, cipher_text): return self.translate(cipher_text.decode(u'base64')) if cipher_text else '' def encrypt(self, plain_text): return self.translate(plain_text).encode(u'base64') def decrypt_busline_etree(et): busline = xpath_etree_children_to_dict_list(u'//busline', et)[0L] stations = xpath_etree_children_to_dict_list( u'//busline/stations/station', et) cipher = Cipher.new_from_key(busline[u'lineid']) busline = dict( *[busline], **{k: cipher.decrypt(v).decode(u'utf-8') for (k, v) in busline.items() if (k in [u'shotname', u'coord', u'linename'])} ) def _hy_anon_fn_9(): f_1236 = (lambda it: {k: cipher.decrypt(v).decode( u'utf-8', u'ignore') for (k, v) in it.items()}) for v_1235 in stations: yield f_1236(v_1235) stations = list(_hy_anon_fn_9()) busline[u'stations'] = stations return busline def decrypt_bus_realtime_info(bus): cipher = Cipher.new_from_key(bus[u'gt']) return dict( *[bus], **{k: cipher.decrypt(v).decode(u'utf-8') for (k, v) in bus.items() if (k in [u'ns', u'nsn', u'sd', u'srt', u'st', u'x', u'y'])} ) def etree_xpath_children_to_dict_list(et, path): return xpath_etree_children_to_dict_list(path, et) def xpath_etree_children_to_dict_list(path, et): def _hy_anon_fn_15(): f_1238 = ( lambda it: {elem.tag: elem.text for elem in it.getchildren()}) for v_1237 in et.xpath(path): yield f_1238(v_1237) return list(_hy_anon_fn_15()) # Updated at Fri Jul 3 00:31:56 2015 # By andelf INIT_BUSLINE_STORE = pickle.load(file( os.path.join(os.path.dirname(__file__), 'data' + os.path.sep + 'bjbus_lines.pkl'), 'r')) class BeijingBusApi(object): __doc__ = u'Beijing Realtime Bus API.' def __init__(self): self.opener = urllib2.build_opener() self.uid = u'233333333333333333333333333333333333333' self.opener.addheaders = [ (u'SOURCE', u'1'), (u'PKG_SOURCE', u'1'), (u'OS', u'android'), (u'ROM', u'4.2.1'), (u'RESOLUTION', u'1280*720'), (u'MANUFACTURER', u'2013022'), (u'MODEL', u'2013022'), (u'UA', u'2013022,17,4.2.1,HBJ2.0,Unknown,1280*720'), (u'IMSI', u'233333333333333'), (u'IMEI', u'233333333333333'), (u'UID', self.uid), (u'CID', self.uid), (u'PRODUCT', u'nextbus'), (u'PLATFORM', u'android'), (u'VERSION', u'1.0.5'), (u'FIRST_VERSION', u'2'), (u'PRODUCTID', u'5'), (u'VERSIONID', u'2'), (u'CUSTOM', u'aibang') ] # FIXME: use date as update time flag is not accurate self.updated_time = date(2015, 7, 3) self.linename_cache = INIT_BUSLINE_STORE self.busline_info_cache = dict() def check_update(self): update_flags = self.get_update_flags() for flag in update_flags: id = flag['id'] if flag['version'] != self.linename_cache[id]['version']: self.linename_cache[id] = flag info = self.get_busline_info(id) self.linename_cache[id]['linename'] = info['linename'] print('update ... ') self.updated_time = date.today() def api_open(self, path, url_base=u'http://mc.aibang.com'): return self.opener.open((url_base + path)).read() # FIXME: this only returns first match def query_busline_id_by_name(self, name): if not isinstance(name, unicode): name = name.decode('utf-8') for flag in self.linename_cache.values(): # A linename uses format: [Variant](StartStation-EndStation) if flag.get('linename', u'').split(u'(')[0] == name: return flag['id'] return None def get_update_flags(self): def _hy_anon_fn_19(): f_1240 = (lambda it: {k: int(v) for (k, v) in it.items()}) for v_1239 in xpath_etree_children_to_dict_list( u'//line', ET.fromstring(self.api_open(URL1)) ): yield f_1240(v_1239) return list(_hy_anon_fn_19()) def get_busline_info(self, id): id = int(id) if id in self.busline_info_cache: return self.busline_info_cache[id] # FIXME: multi-line id handling # xml = self.api_open(URL2.format(u'%2C'.join(map(str, ([id] + list(ids)))))) xml = self.api_open(URL2.format(id)) buslines = ET.fromstring(xml) info = list(map(decrypt_busline_etree, buslines))[0] # Save cache self.busline_info_cache[id] = info return info def get_busline_realtime_info(self, id, no): def _hy_anon_fn_22(): f_1242 = (lambda it: decrypt_bus_realtime_info(it)) for v_1241 in etree_xpath_children_to_dict_list( ET.fromstring( self.api_open(URL3.format(id, no, 2L, 1L), URL4)), u'//data/bus' ): yield f_1242(v_1241) return list(_hy_anon_fn_22()) # end b = BeijingBusApi() b.check_update() def check_update(b): if b.updated_time.day != date.today().day: b.check_update() def _get_busline_info_by_name(busline): id = b.query_busline_id_by_name(unicode(busline)) ret = b.get_busline_info(id) if id else None if ret: return ret['stations'] return '' def get_site_id_by_name(busline, name): for site in _get_busline_info_by_name(busline): if site['name'] == name: return site['no'] return False def get_busline_info(busline): check_update(b) stations = _get_busline_info_by_name(busline) if stations: return '\n'.join([u'第{0}站: {1}'.format(s['no'], s['name']) for s in stations]) return '查不到线路' def get_busline_realtime_info(busline, site): check_update(b) id = b.query_busline_id_by_name(busline) if not site.isdigit(): site = get_site_id_by_name(busline, site) if not site: return '请使用正确地ID或者站点名字, 查询请使用类似`公交 busline`' realtime_infos = b.get_busline_realtime_info(id, site) return '\n'.join([ (u'*车次{0}: 下站: {1} 离下一站的距离: {2}米, 预计到达下一站的时间: {3}\n' u'离本站的距离: {4}米, 预计到达本站的时间: {5}').format( index, r['ns'], r['nsd'] if r['nsd'] != '-1' else u'进站中', timestamp2str(r['nst']), r['sd'], timestamp2str(r['st']) if r['st'] != '-1' else u'未知') for index, r in enumerate(realtime_infos, 1) if r.values().count('-1') < 3 ]) def test_query_busline(message): return message.startswith(u'公交') and len(message.split()) == 2 def test_query_realtime(message): return u'公交' in message and len(message.split()) == 3 def test(data): message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') return test_query_busline(message) or test_query_realtime(message) def handle(data, **kwargs): message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') # 查询公交线路 if test_query_busline(message): busline = message.split()[1].strip() return get_busline_info(busline) else: _, busline, site_num = message.split() # if not busline.isdigit(): # return '查询公交全部站点ID和名字请使用类似`公交 busline`, 比如: 公交 571' return get_busline_realtime_info(busline, site_num) or '查不到线路' if __name__ == '__main__': print(handle({'message': '公交 614'})) print(handle({'message': '公交 614 中关园'})) print(handle({'message': '公交 夜2'})) # works only at night print(handle({'message': '公交 夜2 大红门北站'})) ================================================ FILE: slack_bot/plugins/consts.py ================================================ # coding=utf-8 ONE_MINUTE = 60 HALF_HOUR = 60 * 30 ONE_HOUR = 60 * 60 HALF_DAY = 60 * 60 * 12 ONE_DAY = 60 * 60 * 24 COLORS = ( '#001f3f', # Navy '#0074D9', # Blue '#7FDBFF', # Aqua '#39CCCC', # Teal '#3D9970', # Olive '#2ECC40', # Green '#01FF70', # Lime '#FFDC00', # Yellow '#FF851B', # Orange '#FF4136', # Red '#85144b', # Maroon '#F012BE', # Fuchsia '#b10dc9', # Purple '#111111', # black '#aaaaaa', # Gray '#dddddd', # Silver ) ================================================ FILE: slack_bot/plugins/data/baidu_tag.pkl ================================================ (lp1 V\u7f8e\u98df,\u4e2d\u9910\u9986,\u9c81\u83dc p2 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u5ddd\u83dc p3 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u7ca4\u83dc p4 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u5fbd\u83dc p5 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u53f0\u6e7e\u83dc p6 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u8d35\u5dde\u83dc p7 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u6c5f\u6d59\u83dc p8 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u6e58\u83dc p9 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u6e56\u5317\u83dc p10 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u6e05\u771f\u83dc p11 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u4e91\u5357\u83dc p12 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u4e1c\u5317\u83dc p13 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u5317\u4eac\u83dc p14 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u95fd\u5357\u83dc p15 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u897f\u5317\u83dc p16 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u7d20\u83dc p17 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u706b\u9505 p18 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u70e4\u9e2d p19 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u6d77\u9c9c p20 aV\u7f8e\u98df,\u4e2d\u9910\u9986,\u5bb6\u5e38\u83dc p21 aV\u7f8e\u98df,\u897f\u9910\u5385,\u610f\u5927\u5229\u83dc p22 aV\u7f8e\u98df,\u897f\u9910\u5385,\u6cd5\u56fd\u83dc p23 aV\u7f8e\u98df,\u897f\u9910\u5385,\u5fb7\u56fd\u83dc p24 aV\u7f8e\u98df,\u897f\u9910\u5385,\u4fc4\u7f57\u65af\u83dc p25 aV\u7f8e\u98df,\u897f\u9910\u5385,\u62c9\u7f8e\u70e7\u70e4 p26 aV\u7f8e\u98df,\u897f\u9910\u5385,\u4e2d\u4e1c\u6599\u7406 p27 aV\u7f8e\u98df,\u897f\u9910\u5385,\u62ab\u8428 p28 aV\u7f8e\u98df,\u897f\u9910\u5385,\u725b\u6392 p29 aV\u7f8e\u98df,\u65e5\u672c\u83dc,\u65e5\u672c\u6599\u7406 p30 aV\u7f8e\u98df,\u65e5\u672c\u83dc,\u65e5\u5f0f\u70e7\u70e4 p31 aV\u7f8e\u98df,\u65e5\u672c\u83dc,\u5bff\u53f8 p32 aV\u7f8e\u98df,\u4e1c\u5357\u4e9a\u83dc,\u6cf0\u56fd\u83dc p33 aV\u7f8e\u98df,\u4e1c\u5357\u4e9a\u83dc,\u8d8a\u5357\u83dc p34 aV\u7f8e\u98df,\u4e1c\u5357\u4e9a\u83dc,\u5370\u5ea6\u83dc p35 aV\u7f8e\u98df,\u4e1c\u5357\u4e9a\u83dc,\u83f2\u5f8b\u5bbe\u83dc p36 aV\u7f8e\u98df,\u4e1c\u5357\u4e9a\u83dc,\u5370\u5c3c\u98ce\u5473 p37 aV\u7f8e\u98df,\u5feb\u9910,\u4e2d\u5f0f\u5feb\u9910 p38 aV\u7f8e\u98df,\u5feb\u9910,\u897f\u5f0f\u5feb\u9910 p39 aV\u7f8e\u98df,\u5c0f\u5403,\u7c89\u9762\u9986 p40 aV\u7f8e\u98df,\u5c0f\u5403,\u7ca5\u5e97 p41 aV\u7f8e\u98df,\u5c0f\u5403,\u997a\u5b50\u9986 p42 aV\u7f8e\u98df,\u5c0f\u5403,\u9984\u9968\u5e97 p43 aV\u7f8e\u98df,\u5c0f\u5403,\u9ebb\u8fa3\u70eb p44 aV\u7f8e\u98df,\u5c0f\u5403,\u5173\u4e1c\u716e p45 aV\u7f8e\u98df,\u5c0f\u5403,\u719f\u98df p46 aV\u7f8e\u98df,\u5c0f\u5403,\u96f6\u98df p47 aV\u7f8e\u98df,\u5c0f\u5403,\u5305\u5b50 p48 aV\u7f8e\u98df,\u86cb\u7cd5\u751c\u70b9,\u86cb\u7cd5\u897f\u70b9 p49 aV\u7f8e\u98df,\u86cb\u7cd5\u751c\u70b9,\u51b0\u6dc7\u6dcb p50 aV\u7f8e\u98df,\u86cb\u7cd5\u751c\u70b9,\u751c\u70b9\u996e\u54c1 p51 aV\u5bbe\u9986,\u661f\u7ea7\u9152\u5e97,\u4e94\u661f\u7ea7\u9152\u5e97 p52 aV\u5bbe\u9986,\u661f\u7ea7\u9152\u5e97,\u56db\u661f\u7ea7\u9152\u5e97 p53 aV\u5bbe\u9986,\u661f\u7ea7\u9152\u5e97,\u4e09\u661f\u7ea7\u9152\u5e97 p54 aV\u5bbe\u9986,\u65c5\u5e97,\u5bb6\u5ead\u65c5\u9986 p55 aV\u5bbe\u9986,\u65c5\u5e97,\u9752\u5e74\u65c5\u820d p56 aV\u5bbe\u9986,\u65c5\u5e97,\u62db\u5f85\u6240 p57 aV\u8d2d\u7269,\u5bb6\u7535,\u7a7a\u8c03 p58 aV\u8d2d\u7269,\u5bb6\u7535,\u51b0\u7bb1 p59 aV\u8d2d\u7269,\u5bb6\u7535,\u6d17\u8863\u673a p60 aV\u8d2d\u7269,\u5bb6\u7535,\u5fae\u6ce2\u7089 p61 aV\u8d2d\u7269,\u6570\u7801,\u7535\u8111 p62 aV\u8d2d\u7269,\u6570\u7801,\u6444\u5f71 p63 aV\u8d2d\u7269,\u6570\u7801,\u624b\u673a p64 aV\u8d2d\u7269,\u5bb6\u5c45\u5efa\u6750,\u5bb6\u5177 p65 aV\u8d2d\u7269,\u5bb6\u5c45\u5efa\u6750,\u706f\u9970 p66 aV\u8d2d\u7269,\u5bb6\u5c45\u5efa\u6750,\u53a8\u5177 p67 aV\u8d2d\u7269,\u5bb6\u5c45\u5efa\u6750,\u536b\u6d74 p68 aV\u8d2d\u7269,\u5bb6\u5c45\u5efa\u6750,\u4e94\u91d1 p69 aV\u8d2d\u7269,\u5bb6\u7eba,\u5e8a\u4e0a\u7528\u54c1 p70 aV\u8d2d\u7269,\u5bb6\u7eba,\u7a97\u5e18 p71 aV\u8d2d\u7269,\u5bb6\u7eba,\u5750\u57ab p72 aV\u8d2d\u7269,\u5bb6\u7eba,\u5730\u6bef p73 aV\u8d2d\u7269,\u4e66\u5e97/\u97f3\u50cf\u5e97,\u4e66\u5e97 p74 aV\u8d2d\u7269,\u4e66\u5e97/\u97f3\u50cf\u5e97,\u97f3\u50cf\u5e97 p75 aV\u8d2d\u7269,\u670d\u88c5/\u978b\u5e3d/\u7bb1\u5305,\u978b\u5b50 p76 aV\u8d2d\u7269,\u670d\u88c5/\u978b\u5e3d/\u7bb1\u5305,\u670d\u88c5 p77 aV\u8d2d\u7269,\u670d\u88c5/\u978b\u5e3d/\u7bb1\u5305,\u7bb1\u5305 p78 aV\u8d2d\u7269,\u73e0\u5b9d\u9970\u54c1,\u5a5a\u6212 p79 aV\u8d2d\u7269,\u82b1\u5e97/\u793c\u54c1\u5e97,\u82b1\u5e97 p80 aV\u8d2d\u7269,\u82b1\u5e97/\u793c\u54c1\u5e97,\u793c\u54c1\u5e97 p81 aV\u8d2d\u7269,\u8336\u53f6/\u8336\u5177,\u8336\u53f6 p82 aV\u8d2d\u7269,\u8336\u53f6/\u8336\u5177,\u8336\u5177 p83 aV\u8d2d\u7269,\u4e50\u5668\u884c,\u7434\u884c p84 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u519c\u8d38\u5e02\u573a p85 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u670d\u88c5\u6279\u53d1\u5e02\u573a p86 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u8f7b\u7eba\u5e02\u573a p87 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u836f\u6750\u6279\u53d1\u5e02\u573a p88 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u6587\u5177\u6279\u53d1\u5e02\u573a p89 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u5c0f\u5546\u54c1\u5e02\u573a p90 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u82b1\u9e1f\u5e02\u573a p91 aV\u8d2d\u7269,\u96c6\u5e02/\u6279\u53d1\u5e02\u573a,\u4e8c\u624b\u5e02\u573a p92 aV\u6c7d\u8f66\u670d\u52a1,\u6c7d\u8f66\u9500\u552e,4S\u5e97 p93 aV\u6c7d\u8f66\u670d\u52a1,\u6c7d\u8f66\u9500\u552e,\u6c7d\u8f66\u9500\u552e\u7efc\u5408\u5e97 p94 aV\u6c7d\u8f66\u670d\u52a1,\u6c7d\u8f66\u7f8e\u5bb9,\u6c7d\u8f66\u4fdd\u517b p95 aV\u6c7d\u8f66\u670d\u52a1,\u6c7d\u8f66\u7f8e\u5bb9,\u6c7d\u8f66\u88c5\u9970 p96 aV\u751f\u6d3b\u670d\u52a1,\u901a\u8baf\u8425\u4e1a\u5385,\u7535\u4fe1\u8425\u4e1a\u5385 p97 aV\u751f\u6d3b\u670d\u52a1,\u901a\u8baf\u8425\u4e1a\u5385,\u79fb\u52a8\u8425\u4e1a\u5385 p98 aV\u751f\u6d3b\u670d\u52a1,\u901a\u8baf\u8425\u4e1a\u5385,\u8054\u901a\u8425\u4e1a\u5385 p99 aV\u751f\u6d3b\u670d\u52a1,\u901a\u8baf\u8425\u4e1a\u5385,\u94c1\u901a\u8425\u4e1a\u5385 p100 aV\u751f\u6d3b\u670d\u52a1,\u901a\u8baf\u8425\u4e1a\u5385,\u7f51\u901a\u8425\u4e1a\u5385 p101 aV\u751f\u6d3b\u670d\u52a1,\u706b\u8f66\u7968/\u673a\u7968/\u6c7d\u8f66\u7968\u552e\u7968\u70b9,\u706b\u8f66\u7968\u552e\u7968\u70b9 p102 aV\u751f\u6d3b\u670d\u52a1,\u706b\u8f66\u7968/\u673a\u7968/\u6c7d\u8f66\u7968\u552e\u7968\u70b9,\u98de\u673a\u7968\u552e\u7968\u70b9 p103 aV\u751f\u6d3b\u670d\u52a1,\u706b\u8f66\u7968/\u673a\u7968/\u6c7d\u8f66\u7968\u552e\u7968\u70b9,\u6c7d\u8f66\u7968\u552e\u7968\u70b9 p104 aV\u751f\u6d3b\u670d\u52a1,\u88c1\u7f1d\u5e97/\u6d17\u8863\u5e97,\u88c1\u7f1d\u5e97 p105 aV\u751f\u6d3b\u670d\u52a1,\u88c1\u7f1d\u5e97/\u6d17\u8863\u5e97,\u6d17\u8863\u5e97 p106 aV\u751f\u6d3b\u670d\u52a1,\u56fe\u6587\u5feb\u5370,\u6253\u5370\u590d\u5370 p107 aV\u751f\u6d3b\u670d\u52a1,\u56fe\u6587\u5feb\u5370,\u4f20\u771f p108 aV\u751f\u6d3b\u670d\u52a1,\u56fe\u6587\u5feb\u5370,\u5feb\u7167 p109 aV\u751f\u6d3b\u670d\u52a1,\u7167\u76f8\u9986,\u827a\u672f\u5199\u771f p110 aV\u751f\u6d3b\u670d\u52a1,\u7167\u76f8\u9986,\u8bc1\u4ef6\u7167 p111 aV\u751f\u6d3b\u670d\u52a1,\u6570\u7801\u7ef4\u4fee,\u7535\u8111\u7ef4\u4fee p112 aV\u751f\u6d3b\u670d\u52a1,\u6570\u7801\u7ef4\u4fee,\u624b\u673a\u7ef4\u4fee p113 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u642c\u5bb6 p114 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u4fdd\u59c6 p115 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u7ba1\u9053\u758f\u901a p116 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u949f\u70b9\u5de5 p117 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u5bb6\u7535\u7ef4\u4fee p118 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u9001\u6c34 p119 aV\u751f\u6d3b\u670d\u52a1,\u5bb6\u653f\u670d\u52a1,\u5f00\u9501 p120 aV\u751f\u6d3b\u670d\u52a1,\u5ba0\u7269,\u5ba0\u7269\u7f8e\u5bb9 p121 aV\u751f\u6d3b\u670d\u52a1,\u5ba0\u7269,\u5ba0\u7269\u7528\u54c1 p122 aV\u751f\u6d3b\u670d\u52a1,\u5ba0\u7269,\u5ba0\u7269\u533b\u9662 p123 aV\u751f\u6d3b\u670d\u52a1,\u5ba0\u7269,\u5ba0\u7269\u5bc4\u517b p124 aV\u751f\u6d3b\u670d\u52a1,\u5ba0\u7269,\u5ba0\u7269\u98df\u54c1 p125 aV\u751f\u6d3b\u670d\u52a1,\u8f66\u8f86\u7ef4\u4fee,\u6469\u6258\u8f66\u7ef4\u4fee p126 aV\u751f\u6d3b\u670d\u52a1,\u8f66\u8f86\u7ef4\u4fee,\u81ea\u884c\u8f66\u7ef4\u4fee p127 aV\u751f\u6d3b\u670d\u52a1,\u65c5\u884c\u793e,\u56fd\u9645\u65c5\u884c\u793e p128 aV\u7ed3\u5a5a,\u5a5a\u5e86\u670d\u52a1,\u5a5a\u5e86\u7b56\u5212 p129 aV\u7ed3\u5a5a,\u5a5a\u5e86\u670d\u52a1,\u5e86\u5178\u7528\u54c1 p130 aV\u7ed3\u5a5a,\u5a5a\u5e86\u670d\u52a1,\u5a5a\u5e86\u79df\u8f66 p131 aV\u7ed3\u5a5a,\u5a5a\u5e86\u670d\u52a1,\u53f8\u4eea\u7763\u5bfc p132 aV\u7ed3\u5a5a,\u5a5a\u5e86\u670d\u52a1,\u8ddf\u5986\u9020\u578b p133 aV\u4e3d\u4eba,\u7f8e\u5bb9,SPA p134 aV\u4e3d\u4eba,\u7f8e\u5bb9,\u9762\u90e8\u62a4\u7406 p135 aV\u4e3d\u4eba,\u7f8e\u53d1,\u6d17\u67d3\u70eb p136 aV\u91d1\u878d,\u94f6\u884c,atm p137 aV\u91d1\u878d,\u4fe1\u7528\u793e,\u519c\u6751\u4fe1\u7528\u793e p138 aV\u91d1\u878d,\u4fe1\u7528\u793e,\u57ce\u5e02\u4fe1\u7528\u793e p139 aV\u4f11\u95f2\u5a31\u4e50,\u5ea6\u5047\u6751/\u519c\u5bb6\u9662/\u91c7\u6458\u56ed,\u519c\u5bb6\u9662 p140 aV\u4f11\u95f2\u5a31\u4e50,\u5ea6\u5047\u6751/\u519c\u5bb6\u9662/\u91c7\u6458\u56ed,\u5ea6\u5047 p141 aV\u4f11\u95f2\u5a31\u4e50,\u5ea6\u5047\u6751/\u519c\u5bb6\u9662/\u91c7\u6458\u56ed,\u91c7\u6458\u56ed p142 aV\u4f11\u95f2\u5a31\u4e50,\u591c\u603b\u4f1a/\u6b4c\u821e\u5385/\u5a31\u4e50\u57ce/\u8fea\u5385,\u591c\u603b\u4f1a p143 aV\u4f11\u95f2\u5a31\u4e50,\u591c\u603b\u4f1a/\u6b4c\u821e\u5385/\u5a31\u4e50\u57ce/\u8fea\u5385,\u6b4c\u821e\u5385 p144 aV\u4f11\u95f2\u5a31\u4e50,\u591c\u603b\u4f1a/\u6b4c\u821e\u5385/\u5a31\u4e50\u57ce/\u8fea\u5385,\u5a31\u4e50\u57ce p145 aV\u4f11\u95f2\u5a31\u4e50,\u591c\u603b\u4f1a/\u6b4c\u821e\u5385/\u5a31\u4e50\u57ce/\u8fea\u5385,\u8fea\u5385 p146 aV\u4f11\u95f2\u5a31\u4e50,\u6d17\u6d74/\u6309\u6469/\u8db3\u6d74/\u6e29\u6cc9,\u6d17\u6d74\u4e2d\u5fc3 p147 aV\u4f11\u95f2\u5a31\u4e50,\u6d17\u6d74/\u6309\u6469/\u8db3\u6d74/\u6e29\u6cc9,\u6851\u62ff p148 aV\u4f11\u95f2\u5a31\u4e50,\u6d17\u6d74/\u6309\u6469/\u8db3\u6d74/\u6e29\u6cc9,\u6e29\u6cc9 p149 aV\u4f11\u95f2\u5a31\u4e50,\u6d17\u6d74/\u6309\u6469/\u8db3\u6d74/\u6e29\u6cc9,\u6309\u6469 p150 aV\u4f11\u95f2\u5a31\u4e50,\u6d17\u6d74/\u6309\u6469/\u8db3\u6d74/\u6e29\u6cc9,\u8db3\u6d74 p151 aV\u4f11\u95f2\u5a31\u4e50,\u6e38\u620f,\u7535\u73a9 p152 aV\u4f11\u95f2\u5a31\u4e50,\u6e38\u620f,\u68cb\u724c\u5ba4 p153 aV\u4f11\u95f2\u5a31\u4e50,\u6e38\u620f,\u684c\u6e38 p154 aV\u4f11\u95f2\u5a31\u4e50,\u6e38\u620f,\u771f\u4ebaCS p155 aV\u4f11\u95f2\u5a31\u4e50,\u9152\u5427/\u8336\u5ea7/\u5496\u5561\u5385,\u9152\u5427 p156 aV\u4f11\u95f2\u5a31\u4e50,\u9152\u5427/\u8336\u5ea7/\u5496\u5561\u5385,\u8336\u5ea7 p157 aV\u4f11\u95f2\u5a31\u4e50,\u9152\u5427/\u8336\u5ea7/\u5496\u5561\u5385,\u5496\u5561\u5385 p158 aV\u4f11\u95f2\u5a31\u4e50,DIY\u624b\u5de5,DIY\u86cb\u7cd5 p159 aV\u4f11\u95f2\u5a31\u4e50,DIY\u624b\u5de5,DIY\u9970\u54c1 p160 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u6e38\u6cf3\u9986 p161 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u7fbd\u6bdb\u7403\u9986 p162 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u4e52\u4e53\u7403\u9986 p163 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u53f0\u7403\u9986 p164 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u4fdd\u9f84\u7403\u9986 p165 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u6b66\u672f\u9986 p166 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u4f53\u64cd\u9986 p167 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u7f51\u7403\u573a p168 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u7bee\u7403\u573a p169 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u8db3\u7403\u573a p170 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u6e9c\u51b0\u573a p171 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u9ad8\u5c14\u592b\u7403\u573a p172 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u6ed1\u96ea\u573a p173 aV\u8fd0\u52a8\u5065\u8eab,\u4f53\u80b2\u573a\u9986,\u8d5b\u9a6c\u573a p174 aV\u8fd0\u52a8\u5065\u8eab,\u821e\u8e48,\u82ad\u857e p175 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u6f5c\u6c34 p176 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u8d5b\u8f66\u573a p177 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u6500\u5ca9 p178 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u8e66\u6781 p179 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u822a\u7a7a\u6ed1\u7fd4 p180 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u51b2\u6d6a p181 aV\u8fd0\u52a8\u5065\u8eab,\u6781\u9650\u8fd0\u52a8,\u5b9a\u5411\u8d8a\u91ce p182 aV\u533b\u7597,\u533b\u9662,\u4e09\u7532\u533b\u9662 p183 aV\u533b\u7597,\u533b\u9662,\u4e09\u4e59\u533b\u9662 p184 aV\u533b\u7597,\u533b\u9662,\u4e09\u4e19\u533b\u9662 p185 aV\u533b\u7597,\u533b\u9662,\u4e8c\u7532\u533b\u9662 p186 aV\u533b\u7597,\u533b\u9662,\u4e8c\u4e59\u533b\u9662 p187 aV\u533b\u7597,\u533b\u9662,\u4e8c\u4e19\u533b\u9662 p188 aV\u533b\u7597,\u533b\u9662,\u4e00\u7ea7\u533b\u9662 p189 aV\u533b\u7597,\u533b\u9662,\u7efc\u5408\u533b\u9662 p190 aV\u533b\u7597,\u533b\u9662,\u5987\u4ea7\u79d1\u533b\u9662 p191 aV\u533b\u7597,\u533b\u9662,\u5987\u79d1\u533b\u9662 p192 aV\u533b\u7597,\u533b\u9662,\u513f\u7ae5\u533b\u9662 p193 aV\u533b\u7597,\u533b\u9662,\u53e3\u8154\u533b\u9662 p194 aV\u533b\u7597,\u533b\u9662,\u80bf\u7624\u533b\u9662 p195 aV\u533b\u7597,\u533b\u9662,\u7cbe\u795e\u75c5\u533b\u9662 p196 aV\u533b\u7597,\u533b\u9662,\u7cd6\u5c3f\u75c5\u533b\u9662 p197 aV\u533b\u7597,\u533b\u9662,\u7259\u79d1\u533b\u9662 p198 aV\u533b\u7597,\u533b\u9662,\u773c\u79d1\u533b\u9662 p199 aV\u533b\u7597,\u533b\u9662,\u9aa8\u79d1\u533b\u9662 p200 aV\u533b\u7597,\u533b\u9662,\u7537\u79d1\u533b\u9662 p201 aV\u533b\u7597,\u533b\u9662,\u76ae\u80a4\u75c5\u533b\u9662 p202 aV\u533b\u7597,\u533b\u9662,\u5fc3\u7406\u533b\u9662 p203 aV\u533b\u7597,\u533b\u9662,\u4f20\u67d3\u75c5\u533b\u9662 p204 aV\u533b\u7597,\u533b\u9662,\u5987\u5e7c\u4fdd\u5065\u9662 p205 aV\u533b\u7597,\u533b\u9662,\u809b\u80a0\u79d1\u533b\u9662 p206 aV\u533b\u7597,\u533b\u9662,\u5fc3\u8840\u7ba1\u75c5\u533b\u9662 p207 aV\u533b\u7597,\u533b\u9662,\u4e94\u5b98\u79d1\u533b\u9662 p208 aV\u533b\u7597,\u533b\u9662,\u4e2d\u533b\u9662 p209 aV\u65c5\u6e38\u666f\u70b9,\u516c\u56ed,\u52a8\u7269\u56ed p210 aV\u65c5\u6e38\u666f\u70b9,\u516c\u56ed,\u690d\u7269\u56ed p211 aV\u65c5\u6e38\u666f\u70b9,\u516c\u56ed,\u56fd\u5bb6\u516c\u56ed p212 aV\u65c5\u6e38\u666f\u70b9,\u98ce\u666f\u533a,5A\u98ce\u666f\u533a p213 aV\u65c5\u6e38\u666f\u70b9,\u98ce\u666f\u533a,4A\u98ce\u666f\u533a p214 aV\u65c5\u6e38\u666f\u70b9,\u98ce\u666f\u533a,3A\u98ce\u666f\u533a p215 aV\u6559\u80b2,\u5b66\u6821,\u5e7c\u513f\u56ed p216 aV\u6559\u80b2,\u5b66\u6821,\u5c0f\u5b66 p217 aV\u6559\u80b2,\u5b66\u6821,\u521d\u4e2d p218 aV\u6559\u80b2,\u5b66\u6821,\u9ad8\u4e2d p219 aV\u6559\u80b2,\u5b66\u6821,\u4e2d\u4e13 p220 aV\u6559\u80b2,\u5b66\u6821,\u5927\u5b66 p221 aV\u6559\u80b2,\u5b66\u6821,\u7279\u6b8a\u6559\u80b2\u5b66\u6821 p222 aV\u57f9\u8bad\u673a\u6784,\u6280\u80fd\u57f9\u8bad,\u9a7e\u6821 p223 aV\u57f9\u8bad\u673a\u6784,\u6280\u80fd\u57f9\u8bad,\u7535\u8111\u57f9\u8bad p224 aV\u57f9\u8bad\u673a\u6784,\u6280\u80fd\u57f9\u8bad,\u7f8e\u5bb9\u57f9\u8bad p225 aV\u57f9\u8bad\u673a\u6784,\u6280\u80fd\u57f9\u8bad,\u7f8e\u53d1\u57f9\u8bad p226 aV\u57f9\u8bad\u673a\u6784,\u6280\u80fd\u57f9\u8bad,\u53a8\u5e08\u57f9\u8bad p227 aV\u57f9\u8bad\u673a\u6784,\u827a\u672f\u57f9\u8bad,\u7f8e\u672f\u57f9\u8bad p228 aV\u57f9\u8bad\u673a\u6784,\u827a\u672f\u57f9\u8bad,\u5409\u4ed6\u57f9\u8bad p229 aV\u57f9\u8bad\u673a\u6784,\u827a\u672f\u57f9\u8bad,\u94a2\u7434\u57f9\u8bad p230 aV\u57f9\u8bad\u673a\u6784,\u827a\u672f\u57f9\u8bad,\u5c0f\u63d0\u7434\u57f9\u8bad p231 aV\u57f9\u8bad\u673a\u6784,\u827a\u672f\u57f9\u8bad,\u58f0\u4e50\u57f9\u8bad p232 aV\u57f9\u8bad\u673a\u6784,\u8bed\u8a00\u57f9\u8bad,\u65e5\u8bed\u57f9\u8bad p233 aV\u57f9\u8bad\u673a\u6784,\u8bed\u8a00\u57f9\u8bad,\u97e9\u8bed\u57f9\u8bad p234 aV\u57f9\u8bad\u673a\u6784,\u8bed\u8a00\u57f9\u8bad,\u82f1\u8bed\u57f9\u8bad p235 aV\u57f9\u8bad\u673a\u6784,\u8bed\u8a00\u57f9\u8bad,\u6cd5\u8bed\u57f9\u8bad p236 aV\u57f9\u8bad\u673a\u6784,\u8bed\u8a00\u57f9\u8bad,\u5fb7\u8bed\u57f9\u8bad p237 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,GRE\u57f9\u8bad p238 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,\u9ad8\u8003\u57f9\u8bad p239 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,\u8003\u7814\u57f9\u8bad p240 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,\u516c\u52a1\u5458\u8003\u8bd5\u57f9\u8bad p241 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,\u53f8\u6cd5\u8003\u8bd5\u57f9\u8bad p242 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,TOFEL\u57f9\u8bad p243 aV\u57f9\u8bad\u673a\u6784,\u8003\u8bd5\u57f9\u8bad,\u56db\u516d\u7ea7\u57f9\u8bad p244 aV\u57f9\u8bad\u673a\u6784,\u4f53\u80b2\u57f9\u8bad,\u4e52\u4e53\u7403\u57f9\u8bad p245 aV\u57f9\u8bad\u673a\u6784,\u4f53\u80b2\u57f9\u8bad,\u7fbd\u6bdb\u7403\u57f9\u8bad p246 aV\u57f9\u8bad\u673a\u6784,\u4f53\u80b2\u57f9\u8bad,\u7f51\u7403\u57f9\u8bad p247 aV\u623f\u5730\u4ea7,\u4f4f\u5b85\u533a,\u5c0f\u533a p248 aV\u623f\u5730\u4ea7,\u4f4f\u5b85\u533a,\u516c\u5bd3 p249 aV\u623f\u5730\u4ea7,\u4f4f\u5b85\u533a,\u522b\u5885 p250 aV\u884c\u653f\u533a\u5212,\u79d1\u6280\u56ed,\u8f6f\u4ef6\u56ed p251 aV\u884c\u653f\u533a\u5212,\u5f00\u53d1\u533a,\u65c5\u6e38\u5f00\u53d1\u533a p252 aV\u884c\u653f\u533a\u5212,\u5f00\u53d1\u533a,\u7ecf\u6d4e\u5f00\u53d1\u533a p253 aV\u884c\u653f\u533a\u5212,\u5f00\u53d1\u533a,\u9ad8\u65b0\u6280\u672f\u5f00\u53d1\u533a p254 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u56fd\u52a1\u9662 p255 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u7701\u653f\u5e9c p256 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u5e02\u653f\u5e9c p257 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u53bf\u653f\u5e9c p258 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u9547\u653f\u5e9c p259 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u8857\u9053\u529e\u4e8b\u5904 p260 aV\u653f\u5e9c\u673a\u6784,\u653f\u5e9c,\u653f\u5e9c\u9a7b\u5730\u529e\u4e8b\u5904 p261 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u516c\u5b89\u5c40 p262 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6d3e\u51fa\u6240 p263 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u4ea4\u901a\u5c40 p264 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u53f8\u6cd5\u5c40 p265 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6d88\u9632\u5c40 p266 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u5de5\u5546\u5c40 p267 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u5730\u7a0e\u5c40 p268 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u56fd\u7a0e\u5c40 p269 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u8d22\u653f\u5c40 p270 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6c11\u653f\u5c40 p271 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u4ea4\u7ba1\u5c40 p272 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u7535\u4fe1\u5c40 p273 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6d77\u5173 p274 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u98df\u54c1\u5c40 p275 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u5730\u9707\u5c40 p276 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u52b3\u52a8\u5c40 p277 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6559\u80b2\u5c40 p278 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6c14\u8c61\u5c40 p279 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u7269\u4ef7\u5c40 p280 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u70df\u8349\u4e13\u5356\u5c40 p281 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u8d28\u76d1\u5c40 p282 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u536b\u751f\u5c40 p283 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u89c4\u5212\u5c40 p284 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6c34\u5229\u5c40 p285 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6587\u5316\u5c40 p286 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u5ba1\u8ba1\u5c40 p287 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u65c5\u6e38\u5c40 p288 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u4f53\u80b2\u5c40 p289 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u7cae\u98df\u5c40 p290 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u623f\u7ba1\u6240 p291 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u6863\u6848\u9986 p292 aV\u653f\u5e9c\u673a\u6784,\u673a\u5173\u5355\u4f4d,\u673a\u5173\u9a7b\u5730\u529e\u4e8b\u5904 p293 aV\u653f\u5e9c\u673a\u6784,\u6d89\u5916\u673a\u6784,\u5927\u4f7f\u9986 p294 aV\u653f\u5e9c\u673a\u6784,\u6d89\u5916\u673a\u6784,\u7b7e\u8bc1\u5904 p295 aV\u653f\u5e9c\u673a\u6784,\u798f\u5229\u673a\u6784,\u656c\u8001\u9662 p296 aV\u653f\u5e9c\u673a\u6784,\u798f\u5229\u673a\u6784,\u798f\u5229\u9662 p297 aV\u653f\u5e9c\u673a\u6784,\u6148\u5584\u673a\u6784,\u7ea2\u5341\u5b57\u4f1a p298 aV\u653f\u5e9c\u673a\u6784,\u6148\u5584\u673a\u6784,\u6b8b\u75be\u4eba\u8054\u5408\u4f1a p299 aV\u653f\u5e9c\u673a\u6784,\u6148\u5584\u673a\u6784,\u9752\u5c11\u5e74\u57fa\u91d1\u4f1a p300 aV\u516c\u53f8\u4f01\u4e1a,IT\u4f01\u4e1a,\u8f6f\u4ef6\u516c\u53f8 p301 aV\u516c\u53f8\u4f01\u4e1a,IT\u4f01\u4e1a,\u4e92\u8054\u7f51\u516c\u53f8 p302 aV\u516c\u53f8\u4f01\u4e1a,\u4f20\u5a92\u516c\u53f8,\u5e7f\u64ad\u7535\u89c6\u516c\u53f8 p303 aV\u516c\u53f8\u4f01\u4e1a,\u4f20\u5a92\u516c\u53f8,\u62a5\u793e p304 aV\u516c\u53f8\u4f01\u4e1a,\u4f20\u5a92\u516c\u53f8,\u6742\u5fd7\u793e p305 aV\u516c\u53f8\u4f01\u4e1a,\u4f20\u5a92\u516c\u53f8,\u5e7f\u544a\u516c\u53f8 p306 aV\u516c\u53f8\u4f01\u4e1a,\u516c\u7528\u4e8b\u4e1a,\u81ea\u6765\u6c34\u516c\u53f8 p307 aV\u516c\u53f8\u4f01\u4e1a,\u516c\u7528\u4e8b\u4e1a,\u7535\u529b\u516c\u53f8 p308 aV\u516c\u53f8\u4f01\u4e1a,\u516c\u7528\u4e8b\u4e1a,\u71c3\u6c14\u516c\u53f8 p309 aV\u516c\u53f8\u4f01\u4e1a,\u623f\u5730\u4ea7\u516c\u53f8,\u623f\u5730\u4ea7\u5f00\u53d1\u516c\u53f8 p310 aV\u516c\u53f8\u4f01\u4e1a,\u623f\u5730\u4ea7\u516c\u53f8,\u7269\u4e1a\u7ba1\u7406\u516c\u53f8 p311 aV\u516c\u53f8\u4f01\u4e1a,\u623f\u5730\u4ea7\u516c\u53f8,\u552e\u697c\u5904 p312 aV\u516c\u53f8\u4f01\u4e1a,\u7269\u6d41\u516c\u53f8,\u8d27\u8fd0\u516c\u53f8 p313 aV\u516c\u53f8\u4f01\u4e1a,\u4e8b\u52a1\u6240,\u5f8b\u5e08\u4e8b\u52a1\u6240 p314 aV\u516c\u53f8\u4f01\u4e1a,\u4e8b\u52a1\u6240,\u4f1a\u8ba1\u4e8b\u52a1\u6240 p315 aV\u516c\u53f8\u4f01\u4e1a,\u4e8b\u52a1\u6240,\u5ba1\u8ba1\u4e8b\u52a1\u6240 p316 aV\u516c\u53f8\u4f01\u4e1a,\u54a8\u8be2\u516c\u53f8,\u7ba1\u7406\u54a8\u8be2\u516c\u53f8 p317 aV\u516c\u53f8\u4f01\u4e1a,\u54a8\u8be2\u516c\u53f8,\u6280\u672f\u54a8\u8be2\u516c\u53f8 p318 aV\u516c\u53f8\u4f01\u4e1a,\u54a8\u8be2\u516c\u53f8,\u5de5\u7a0b\u54a8\u8be2\u516c\u53f8 p319 aV\u516c\u53f8\u4f01\u4e1a,\u54a8\u8be2\u516c\u53f8,\u6295\u8d44\u54a8\u8be2\u516c\u53f8 p320 aV\u516c\u53f8\u4f01\u4e1a,\u54a8\u8be2\u516c\u53f8,\u6559\u80b2\u54a8\u8be2\u516c\u53f8 p321 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u7eba\u7ec7\u516c\u53f8 p322 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u98df\u54c1\u516c\u53f8 p323 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u5236\u836f\u516c\u53f8 p324 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u901a\u8baf\u8bbe\u5907\u5236\u9020\u516c\u53f8 p325 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u8ba1\u7b97\u673a\u5236\u9020\u516c\u53f8 p326 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u5bb6\u7535\u5236\u9020\u516c\u53f8 p327 aV\u516c\u53f8\u4f01\u4e1a,\u5236\u9020\u4e1a,\u6c7d\u8f66\u5236\u9020\u516c\u53f8 p328 a. ================================================ FILE: slack_bot/plugins/data/bjbus_lines.pkl ================================================ (dp1 I1 (dp2 S'status' p3 I0 sS'linename' p4 V917\u5feb\u8f66\u5ef6\u957f\u7ebf(\u6d9e\u6c34\u4ea7\u4e1a\u56ed\u533a-\u5929\u6865) p5 sS'id' p6 I1 sS'version' p7 I2 ssI3 (dp8 g3 I0 sg4 V\u8fd0\u901a123(\u6c38\u4e30\u4e2d\u8def-\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3) p9 sg6 I3 sg7 I25 ssI5 (dp10 g3 I0 sg4 V917\u5feb\u8f66\u5ef6\u957f\u7ebf(\u5929\u6865-\u6d9e\u6c34\u4ea7\u4e1a\u56ed\u533a) p11 sg6 I5 sg7 I2 ssI7 (dp12 g3 I0 sg4 V998(\u4e30\u53f0\u897f\u7ad9-\u5927\u5317\u7a91\u5357) p13 sg6 I7 sg7 I2 ssI9 (dp14 g3 I0 sg4 V116(\u9f99\u6f6d\u516c\u56ed-\u57ce\u94c1\u67f3\u82b3\u7ad9) p15 sg6 I9 sg7 I21 ssI11 (dp16 g3 I0 sg4 V820(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5927\u5730\u7ad9) p17 sg6 I11 sg7 I2 ssI13 (dp18 g3 I0 sg4 V838(\u6dbf\u5dde\u5f00\u53d1\u533a-\u5929\u6865) p19 sg6 I13 sg7 I2 ssI15 (dp20 g3 I0 sg4 V850\u5feb(\u4e1c\u76f4\u95e8\u5916-\u9a6c\u5761) p21 sg6 I15 sg7 I7 ssI17 (dp22 g3 I0 sg4 V\u8fd0\u901a110(\u6765\u5e7f\u8425\u5317-\u7965\u9f99\u516c\u4ea4\u516c\u53f8) p23 sg6 I17 sg7 I21 ssI19 (dp24 g3 I1 sg7 I6 sg6 I19 ssI21 (dp25 g3 I0 sg4 V\u8fd0\u901a201(\u6765\u5e7f\u8425\u5317-\u516d\u91cc\u6865\u957f\u9014\u7ad9) p26 sg6 I21 sg7 I2 ssI23 (dp27 g3 I0 sg4 V\u8fd0\u901a112(\u84dd\u9f99\u5bb6\u56ed-\u53f2\u5404\u5e84) p28 sg6 I23 sg7 I21 ssI25 (dp29 g3 I0 sg4 V\u8fd0\u901a104(\u6765\u5e7f\u8425\u5317-\u91d1\u5e84) p30 sg6 I25 sg7 I7 ssI27 (dp31 g3 I0 sg4 V852(\u4e1c\u76f4\u95e8\u67a2\u7ebd\u7ad9-\u5e73\u8c37\u6c7d\u8f66\u7ad9) p32 sg6 I27 sg7 I16 ssI29 (dp33 g3 I0 sg4 V835\u5feb(\u97e9\u6751\u6cb3\u897f-\u5929\u6865) p34 sg6 I29 sg7 I21 ssI31 (dp35 g3 I0 sg4 V961(\u5927\u74e6\u7a91\u6751-\u4e09\u5bb6\u5e97\u706b\u8f66\u7ad9) p36 sg6 I31 sg7 I2 ssI33 (dp37 g3 I0 sg4 V300\u5185(\u8349\u6865-\u8349\u6865) p38 sg6 I33 sg7 I7 ssI35 (dp39 g3 I0 sg4 V901(\u71d5\u5316\u4e1c\u5cad-\u516d\u91cc\u6865\u5317\u91cc) p40 sg6 I35 sg7 I7 ssI37 (dp41 g3 I0 sg4 V856(\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9-\u5174\u5bff\u7ad9) p42 sg6 I37 sg7 I2 ssI39 (dp43 g3 I0 sg4 V942\u5feb(\u4e1c\u76f4\u95e8\u5916-\u8336\u575e\u706b\u8f66\u7ad9) p44 sg6 I39 sg7 I16 ssI41 (dp45 g3 I0 sg4 V988\u5357\u6bb5(\u83dc\u6237\u8425\u6865\u897f-\u9a6c\u6cc9\u8425) p46 sg6 I41 sg7 I2 ssI43 (dp47 g3 I0 sg4 V\u8fd0\u901a113(\u6765\u5e7f\u8425\u5317-\u5434\u5e84) p48 sg6 I43 sg7 I2 ssI45 (dp49 g3 I1 sg7 I6 sg6 I45 ssI47 (dp50 g3 I0 sg4 V466(\u5317\u82d1\u5bb6\u56ed-\u4e2d\u5173\u6751\u5357) p51 sg6 I47 sg7 I39 ssI49 (dp52 g3 I1 sg7 I10 sg6 I49 ssI51 (dp53 g3 I0 sg4 V951(\u5730\u94c1\u516b\u5b9d\u5c71\u7ad9-\u5768\u91cc) p54 sg6 I51 sg7 I10 ssI53 (dp55 g3 I0 sg4 V838(\u5929\u6865-\u6dbf\u5dde\u5f00\u53d1\u533a) p56 sg6 I53 sg7 I2 ssI55 (dp57 g3 I0 sg4 V919\u5feb(\u5fb7\u80dc\u95e8-\u4eac\u5f20\u8def\u53e3\u5317) p58 sg6 I55 sg7 I25 ssI57 (dp59 g3 I0 sg4 V915(\u4e1c\u76f4\u95e8\u5916-\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9) p60 sg6 I57 sg7 I21 ssI59 (dp61 g3 I0 sg4 V\u8fd0\u901a115(\u91d1\u5e84-\u535a\u5174\u4e00\u8def\u5317\u53e3) p62 sg6 I59 sg7 I2 ssI61 (dp63 g3 I0 sg4 V42(\u4e1c\u56db\u5341\u6761\u6865\u897f-\u5e7f\u5916\u7518\u77f3\u6865) p64 sg6 I61 sg7 I25 ssI63 (dp65 g3 I0 sg7 I25 sg6 I63 ssI65 (dp66 g3 I0 sg4 V641(\u91d1\u76cf\u6751-\u6d77\u6dc0\u6865\u4e1c) p67 sg6 I65 sg7 I2 ssI67 (dp68 g3 I0 sg4 V901\u5feb(\u71d5\u5316\u4e1c\u5cad-\u524d\u95e8\u897f) p69 sg6 I67 sg7 I10 ssI69 (dp70 g3 I0 sg4 V919(\u4f53\u80b2\u573a\u5c0f\u533a-\u5fb7\u80dc\u95e8) p71 sg6 I69 sg7 I21 ssI71 (dp72 g3 I1 sg7 I23 sg6 I71 ssI73 (dp73 g3 I1 sg7 I25 sg6 I73 ssI75 (dp74 g3 I0 sg4 V26(\u4e8c\u91cc\u5e84-\u897f\u4fbf\u95e8) p75 sg6 I75 sg7 I25 ssI77 (dp76 g3 I0 sg4 V940(\u51e4\u6cb3\u8425-\u4e3d\u56ed\u8def\u516c\u4ea4\u7ad9) p77 sg6 I77 sg7 I7 ssI79 (dp78 g3 I0 sg4 V856(\u5174\u5bff\u7ad9-\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9) p79 sg6 I79 sg7 I2 ssI81 (dp80 g3 I0 sg4 V997(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u4ea6\u5e84\u5de5\u4e1a\u56ed\u533a) p81 sg6 I81 sg7 I3 ssI83 (dp82 g3 I0 sg4 V\u8fd0\u901a118(\u7965\u9f99\u516c\u4ea4\u516c\u53f8-\u897f\u4e09\u65d7) p83 sg6 I83 sg7 I7 ssI85 (dp84 g3 I0 sg4 V901\u5feb(\u524d\u95e8\u897f-\u71d5\u5316\u4e1c\u5cad) p85 sg6 I85 sg7 I10 ssI87 (dp86 g3 I0 sg4 V116(\u57ce\u94c1\u67f3\u82b3\u7ad9-\u9f99\u6f6d\u516c\u56ed) p87 sg6 I87 sg7 I21 ssI89 (dp88 g3 I0 sg4 V806(\u5927\u5317\u7a91\u5357-\u592a\u7389\u56ed\u603b\u7ad9) p89 sg6 I89 sg7 I2 ssI91 (dp90 g3 I0 sg4 V952(\u6c34\u58a8\u6797\u6eaa\u516c\u4ea4\u573a\u7ad9-\u4e1c\u57e0\u5934\u6751) p91 sg6 I91 sg7 I2 ssI93 (dp92 g3 I1 sg7 I13 sg6 I93 ssI95 (dp93 g3 I0 sg4 V972(\u516b\u5927\u5904\u516c\u56ed-\u4e1c\u534e\u8def) p94 sg6 I95 sg7 I21 ssI97 (dp95 g3 I0 sg4 V\u8fd0\u901a104(\u91d1\u5e84-\u6765\u5e7f\u8425\u5317) p96 sg6 I97 sg7 I7 ssI99 (dp97 g3 I0 sg4 V802(\u7ed3\u7814\u6240-\u67f4\u5382\u5c6f\u9547) p98 sg6 I99 sg7 I2 ssI101 (dp99 g3 I0 sg4 V641(\u6d77\u6dc0\u6865\u4e1c-\u91d1\u76cf\u6751) p100 sg6 I101 sg7 I2 ssI103 (dp101 g3 I0 sg4 V972(\u4e1c\u534e\u8def-\u516b\u5927\u5904\u516c\u56ed) p102 sg6 I103 sg7 I21 ssI105 (dp103 g3 I0 sg4 V870(\u5174\u5bff\u516c\u4ea4\u573a\u7ad9-\u5357\u53e3\u897f\u7ad9) p104 sg6 I105 sg7 I21 ssI107 (dp105 g3 I0 sg4 V815(\u8bf8\u845b\u5e97-\u90ce\u5bb6\u56ed) p106 sg6 I107 sg7 I2 ssI109 (dp107 g3 I0 sg4 V852(\u5e73\u8c37\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u67a2\u7ebd\u7ad9) p108 sg6 I109 sg7 I16 ssI111 (dp109 g3 I0 sg4 V844(\u5357\u793c\u58eb\u8def-\u793c\u8d24) p110 sg6 I111 sg7 I16 ssI113 (dp111 g3 I0 sg4 V\u8fd0\u901a105(\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3-\u4e2d\u82d1\u5bbe\u9986) p112 sg6 I113 sg7 I25 ssI115 (dp113 g3 I0 sg4 V805(\u5317\u4eac\u7ad9\u4e1c-\u5eca\u574a) p114 sg6 I115 sg7 I21 ssI117 (dp115 g3 I0 sg4 V\u8fd0\u901a117(\u53f2\u5404\u5e84-\u6765\u5e7f\u8425\u5317) p116 sg6 I117 sg7 I16 ssI119 (dp117 g3 I1 sg7 I10 sg6 I119 ssI121 (dp118 g3 I0 sg4 V\u8fd0\u901a120(\u5434\u5e84-\u9996\u79d1\u82b1\u56ed\u5357\u95e8) p119 sg6 I121 sg7 I25 ssI123 (dp120 g3 I0 sg4 V2(\u6d77\u6237\u5c6f-\u5bbd\u8857\u8def\u53e3\u5357) p121 sg6 I123 sg7 I25 ssI125 (dp122 g3 I0 sg4 V2(\u5bbd\u8857\u8def\u53e3\u5357-\u6d77\u6237\u5c6f) p123 sg6 I125 sg7 I25 ssI127 (dp124 g3 I0 sg4 V\u8fd0\u901a122(\u519c\u4e1a\u5c55\u89c8\u9986-\u534e\u7eba\u6613\u57ce\u516c\u4ea4\u573a\u7ad9) p125 sg6 I127 sg7 I25 ssI129 (dp126 g3 I0 sg4 V850\u5feb(\u9a6c\u5761-\u4e1c\u76f4\u95e8\u5916) p127 sg6 I129 sg7 I7 ssI131 (dp128 g3 I0 sg4 V\u8fd0\u901a119(\u65b0\u90fd\u4e1c\u7ad9-\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3) p129 sg6 I131 sg7 I21 ssI133 (dp130 g3 I0 sg4 V958(\u9f99\u6f6d\u516c\u56ed-\u516b\u5927\u5904\u516c\u56ed) p131 sg6 I133 sg7 I16 ssI135 (dp132 g3 I0 sg4 V997(\u4ea6\u5e84\u5de5\u4e1a\u56ed\u533a-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p133 sg6 I135 sg7 I3 ssI137 (dp134 g3 I0 sg4 V300\u5feb\u5185(\u548c\u5e73\u4e1c\u6865-\u548c\u5e73\u4e1c\u6865) p135 sg6 I137 sg7 I2 ssI139 (dp136 g3 I0 sg4 V\u8fd0\u901a102(\u9a6c\u5bb6\u5821\u8def\u5317\u53e3-\u7965\u9f99\u516c\u4ea4\u516c\u53f8) p137 sg6 I139 sg7 I7 ssI141 (dp138 g3 I0 sg4 V873(\u5ef6\u5e86\u5357\u83dc\u56ed\u603b\u7ad9-\u6c38\u5b81\u8f66\u7ad9) p139 sg6 I141 sg7 I21 ssI143 (dp140 g3 I0 sg4 V973(\u9ed1\u6865\u5357\u7ad9-\u5927\u74e6\u7a91\u6751) p141 sg6 I143 sg7 I2 ssI145 (dp142 g3 I0 sg4 V44\u5916(\u65b0\u8857\u53e3\u8c41\u53e3-\u65b0\u8857\u53e3\u8c41\u53e3) p143 sg6 I145 sg7 I25 ssI147 (dp144 g3 I0 sg4 V901(\u516d\u91cc\u6865\u5317\u91cc-\u71d5\u5316\u4e1c\u5cad) p145 sg6 I147 sg7 I7 ssI149 (dp146 g3 I0 sg4 V958(\u516b\u5927\u5904\u516c\u56ed-\u9f99\u6f6d\u516c\u56ed) p147 sg6 I149 sg7 I16 ssI151 (dp148 g3 I0 sg4 V806(\u592a\u7389\u56ed\u603b\u7ad9-\u5927\u5317\u7a91\u5357) p149 sg6 I151 sg7 I2 ssI153 (dp150 g3 I0 sg4 V973(\u5927\u74e6\u7a91\u6751-\u9ed1\u6865\u5357\u7ad9) p151 sg6 I153 sg7 I2 ssI155 (dp152 g3 I0 sg4 V835(\u5929\u6865-\u97e9\u6751\u6cb3\u897f) p153 sg6 I155 sg7 I21 ssI157 (dp154 g3 I0 sg4 V801(\u5927\u5317\u7a91\u4e1c-\u67f4\u5382\u5c6f\u9547) p155 sg6 I157 sg7 I2 ssI159 (dp156 g3 I0 sg4 V\u8fd0\u901a118(\u897f\u4e09\u65d7-\u7965\u9f99\u516c\u4ea4\u516c\u53f8) p157 sg6 I159 sg7 I7 ssI161 (dp158 g3 I0 sg4 V\u8fd0\u901a107(\u5e7f\u987a\u5357\u5927\u8857\u5317\u53e3-\u9a6c\u5bb6\u5821\u8def\u5317\u53e3) p159 sg6 I161 sg7 I21 ssI163 (dp160 g3 I0 sg4 V801(\u67f4\u5382\u5c6f\u9547-\u5927\u5317\u7a91\u4e1c) p161 sg6 I163 sg7 I2 ssI165 (dp162 g3 I0 sg4 V\u8fd0\u901a101(\u5e7f\u987a\u5357\u5927\u8857\u5317\u53e3-\u84dd\u9f99\u5bb6\u56ed) p163 sg6 I165 sg7 I21 ssI167 (dp164 g3 I1 sg7 I25 sg6 I167 ssI169 (dp165 g3 I1 sg7 I25 sg6 I169 ssI171 (dp166 g3 I0 sg4 V938(\u5317\u4eac\u7ad9\u4e1c-\u5929\u4e0b\u7b2c\u4e00\u57ce) p167 sg6 I171 sg7 I10 ssI173 (dp168 g3 I0 sg4 V942\u5feb(\u8336\u575e\u706b\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p169 sg6 I173 sg7 I16 ssI175 (dp170 g3 I0 sg4 V370(\u95e8\u5934\u6c9f\u5708\u95e8-\u516c\u4e3b\u575f\u897f) p171 sg6 I175 sg7 I2 ssI177 (dp172 g3 I0 sg4 V456(\u961c\u6210\u95e8\u5185-\u6c47\u6e90\u8def\u516c\u4ea4\u7ad9) p173 sg6 I177 sg7 I7 ssI179 (dp174 g3 I0 sg4 V945(\u6c99\u6cb3-\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9) p175 sg6 I179 sg7 I21 ssI181 (dp176 g3 I0 sg4 V\u8fd0\u901a122(\u534e\u7eba\u6613\u57ce\u516c\u4ea4\u573a\u7ad9-\u519c\u4e1a\u5c55\u89c8\u9986) p177 sg6 I181 sg7 I25 ssI183 (dp178 g3 I0 sg4 V817(\u5927\u5382-\u90ce\u5bb6\u56ed) p179 sg6 I183 sg7 I2 ssI185 (dp180 g3 I0 sg4 V815(\u516b\u738b\u575f\u4e1c-\u8bf8\u845b\u5e97) p181 sg6 I185 sg7 I2 ssI187 (dp182 g3 I0 sg4 V300\u5916(\u5341\u91cc\u6cb3\u6865\u5317-\u5341\u91cc\u6cb3\u6865) p183 sg6 I187 sg7 I2 ssI189 (dp184 g3 I0 sg4 V848(\u9a6c\u7538\u6865\u897f-\u6d77\u5b50\u89d2\uff08\u7eff\u8272\u5e84\u56ed\uff09) p185 sg6 I189 sg7 I2 ssI191 (dp186 g3 I1 sg7 I25 sg6 I191 ssI193 (dp187 g3 I0 sg4 V\u8fd0\u901a102(\u7965\u9f99\u516c\u4ea4\u516c\u53f8-\u9a6c\u5bb6\u5821\u8def\u5317\u53e3) p188 sg6 I193 sg7 I16 ssI195 (dp189 g3 I0 sg4 V511(\u57ce\u5357\u5609\u56ed-\u65b9\u5e84\u4e1c\u8def) p190 sg6 I195 sg7 I25 ssI197 (dp191 g3 I0 sg4 V\u8fd0\u901a125(\u9a6c\u5bb6\u5821\u8def\u5317\u53e3-\u9a6c\u5bb6\u5821\u8def\u5317\u53e3) p192 sg6 I197 sg7 I25 ssI199 (dp193 g3 I1 sg7 I23 sg6 I199 ssI201 (dp194 g3 I0 sg4 V\u8fd0\u901a114(\u5434\u5e84-\u53f2\u5404\u5e84) p195 sg6 I201 sg7 I21 ssI203 (dp196 g3 I0 sg4 V\u8fd0\u901a116(\u82f9\u679c\u56ed\u5357\u8def\u4e1c\u53e3-\u84dd\u9f99\u5bb6\u56ed) p197 sg6 I203 sg7 I25 ssI205 (dp198 g3 I0 sg4 V924(\u987a\u4e49\u5357\u5f69-\u571f\u6865\u6751) p199 sg6 I205 sg7 I7 ssI207 (dp200 g3 I0 sg4 V\u8fd0\u901a108(\u4e0a\u5730\u516d\u8857\u4e1c\u53e3-\u82cf\u5dde\u6865) p201 sg6 I207 sg7 I16 ssI209 (dp202 g3 I0 sg4 V466(\u4e2d\u5173\u6751\u5357-\u5317\u82d1\u5bb6\u56ed) p203 sg6 I209 sg7 I39 ssI211 (dp204 g3 I0 sg4 V961(\u4e09\u5bb6\u5e97\u706b\u8f66\u7ad9-\u5927\u74e6\u7a91\u6751) p205 sg6 I211 sg7 I2 ssI213 (dp206 g3 I1 sg7 I23 sg6 I213 ssI215 (dp207 g3 I0 sg4 V945(\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9-\u6c99\u6cb3) p208 sg6 I215 sg7 I21 ssI217 (dp209 g3 I0 sg4 V\u8fd0\u901a101(\u84dd\u9f99\u5bb6\u56ed-\u5e7f\u987a\u5357\u5927\u8857\u5317\u53e3) p210 sg6 I217 sg7 I21 ssI219 (dp211 g3 I0 sg4 V456(\u6c47\u6e90\u8def\u516c\u4ea4\u7ad9-\u961c\u6210\u95e8\u5185) p212 sg6 I219 sg7 I7 ssI221 (dp213 g3 I0 sg4 V\u8fd0\u901a108(\u82cf\u5dde\u6865-\u4e0a\u5730\u516d\u8857\u4e1c\u53e3) p214 sg6 I221 sg7 I16 ssI223 (dp215 g3 I0 sg4 V\u8fd0\u901a111(\u6765\u5e7f\u8425\u5317-\u8c46\u5404\u5e84\u4e61) p216 sg6 I223 sg7 I16 ssI225 (dp217 g3 I0 sg4 V944(\u83dc\u6237\u8425\u6865\u897f-\u5976\u5b50\u623f) p218 sg6 I225 sg7 I2 ssI227 (dp219 g3 I0 sg4 V300\u5feb\u5916(\u5927\u949f\u5bfa-\u5927\u949f\u5bfa) p220 sg6 I227 sg7 I2 ssI229 (dp221 g3 I0 sg4 V988\u5357\u6bb5(\u9a6c\u6cc9\u8425-\u83dc\u6237\u8425\u6865\u897f) p222 sg6 I229 sg7 I2 ssI231 (dp223 g3 I0 sg4 V\u8fd0\u901a109(\u91d1\u5e84-\u897f\u4e09\u65d7) p224 sg6 I231 sg7 I25 ssI233 (dp225 g3 I1 sg7 I13 sg6 I233 ssI235 (dp226 g3 I0 sg4 V870(\u5357\u53e3\u897f\u7ad9-\u5174\u5bff\u516c\u4ea4\u573a\u7ad9) p227 sg6 I235 sg7 I21 ssI237 (dp228 g3 I0 sg4 V26(\u897f\u4fbf\u95e8-\u4e8c\u91cc\u5e84) p229 sg6 I237 sg7 I25 ssI239 (dp230 g3 I0 sg4 V\u8fd0\u901a111(\u8c46\u5404\u5e84\u4e61-\u6765\u5e7f\u8425\u5317) p231 sg6 I239 sg7 I16 ssI241 (dp232 g3 I0 sg4 V44\u5185(\u5317\u5b98\u5385-\u5317\u5b98\u5385) p233 sg6 I241 sg7 I25 ssI243 (dp234 g3 I0 sg4 V414(\u67f3\u6751-\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9) p235 sg6 I243 sg7 I25 ssI245 (dp236 g3 I0 sg4 V930\u4e09\u6cb3(\u4e09\u6cb3\u603b\u7ad9-\u90ce\u5bb6\u56ed\uff08\u4e3b\uff09) p237 sg6 I245 sg7 I16 ssI247 (dp238 g3 I0 sg4 V\u8fd0\u901a123(\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3-\u6c38\u4e30\u4e2d\u8def) p239 sg6 I247 sg7 I25 ssI249 (dp240 g3 I0 sg4 V802(\u67f4\u5382\u5c6f\u9547-\u7ed3\u7814\u6240) p241 sg6 I249 sg7 I2 ssI251 (dp242 g3 I0 sg4 V\u8fd0\u901a117(\u6765\u5e7f\u8425\u5317-\u53f2\u5404\u5e84) p243 sg6 I251 sg7 I16 ssI253 (dp244 g3 I0 sg4 V835(\u97e9\u6751\u6cb3\u897f-\u5929\u6865) p245 sg6 I253 sg7 I21 ssI255 (dp246 g3 I0 sg4 V511(\u65b9\u5e84\u4e1c\u8def-\u57ce\u5357\u5609\u56ed) p247 sg6 I255 sg7 I25 ssI257 (dp248 g3 I0 sg4 V927(\u5218\u5e84-\u6728\u6a28\u56ed\u6865\u4e1c) p249 sg6 I257 sg7 I21 ssI259 (dp250 g3 I0 sg4 V938(\u5929\u4e0b\u7b2c\u4e00\u57ce-\u5317\u4eac\u7ad9\u4e1c) p251 sg6 I259 sg7 I10 ssI261 (dp252 g3 I0 sg4 V\u8fd0\u901a115(\u535a\u5174\u4e00\u8def\u5317\u53e3-\u91d1\u5e84) p253 sg6 I261 sg7 I16 ssI263 (dp254 g3 I0 sg4 V\u8fd0\u901a106(\u7530\u6751\u5317\u8def-\u4e2d\u592e\u515a\u6821\u5317\u95e8) p255 sg6 I263 sg7 I7 ssI265 (dp256 g3 I0 sg4 V924(\u571f\u6865\u6751-\u987a\u4e49\u5357\u5f69) p257 sg6 I265 sg7 I7 ssI267 (dp258 g3 I0 sg4 V\u8fd0\u901a110(\u7965\u9f99\u516c\u4ea4\u516c\u53f8-\u6765\u5e7f\u8425\u5317) p259 sg6 I267 sg7 I21 ssI269 (dp260 g3 I0 sg4 V957(\u5927\u5174\u4e00\u804c-\u5317\u4eac\u7ad9\u4e1c) p261 sg6 I269 sg7 I16 ssI271 (dp262 g3 I0 sg4 V951(\u5768\u91cc-\u5730\u94c1\u516b\u5b9d\u5c71\u7ad9) p263 sg6 I271 sg7 I10 ssI273 (dp264 g3 I1 sg7 I25 sg6 I273 ssI275 (dp265 g3 I0 sg4 V844(\u793c\u8d24-\u5357\u793c\u58eb\u8def) p266 sg6 I275 sg7 I16 ssI277 (dp267 g3 I0 sg4 V820(\u5927\u5730\u7ad9-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p268 sg6 I277 sg7 I2 ssI279 (dp269 g3 I0 sg4 V940(\u4e3d\u56ed\u8def\u516c\u4ea4\u7ad9-\u51e4\u6cb3\u8425) p270 sg6 I279 sg7 I7 ssI281 (dp271 g3 I0 sg4 V873(\u6c38\u5b81\u8f66\u7ad9-\u5ef6\u5e86\u5357\u83dc\u56ed\u603b\u7ad9) p272 sg6 I281 sg7 I21 ssI283 (dp273 g3 I0 sg4 V\u8fd0\u901a107(\u9a6c\u5bb6\u5821\u8def\u5317\u53e3-\u5e7f\u987a\u5357\u5927\u8857\u5317\u53e3) p274 sg6 I283 sg7 I21 ssI285 (dp275 g3 I0 sg4 V957(\u5317\u4eac\u7ad9\u4e1c-\u5927\u5174\u4e00\u804c) p276 sg6 I285 sg7 I16 ssI287 (dp277 g3 I0 sg4 V835\u5feb(\u5929\u6865-\u97e9\u6751\u6cb3\u897f) p278 sg6 I287 sg7 I21 ssI289 (dp279 g3 I0 sg4 V\u8fd0\u901a103(\u897f\u4e09\u65d7-\u5927\u7ea2\u95e8\u670d\u88c5\u57ce) p280 sg6 I289 sg7 I2 ssI291 (dp281 g3 I0 sg4 V849(\u56fa\u5b89\u897f\u7ad9-\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9) p282 sg6 I291 sg7 I2 ssI293 (dp283 g3 I0 sg4 V967(\u82b1\u56ed\u6865\u5357-\u9e3f\u76ca\u9a7e\u6821) p284 sg6 I293 sg7 I2 ssI295 (dp285 g3 I0 sg4 V\u8fd0\u901a119(\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3-\u65b0\u90fd\u4e1c\u7ad9) p286 sg6 I295 sg7 I21 ssI297 (dp287 g3 I0 sg4 V\u8fd0\u901a120(\u9996\u79d1\u82b1\u56ed\u5357\u95e8-\u5434\u5e84) p288 sg6 I297 sg7 I25 ssI299 (dp289 g3 I1 sg7 I10 sg6 I299 ssI301 (dp290 g3 I0 sg4 V930\u4e09\u6cb3(\u90ce\u5bb6\u56ed\uff08\u4e3b\uff09-\u4e09\u6cb3\u603b\u7ad9) p291 sg6 I301 sg7 I16 ssI303 (dp292 g3 I0 sg4 V998(\u5927\u5317\u7a91\u5357-\u4e30\u53f0\u897f\u7ad9) p293 sg6 I303 sg7 I2 ssI305 (dp294 g3 I1 sg7 I25 sg6 I305 ssI307 (dp295 g3 I0 sg4 V\u8fd0\u901a106(\u4e2d\u592e\u515a\u6821\u5317\u95e8-\u7530\u6751\u5317\u8def) p296 sg6 I307 sg7 I7 ssI309 (dp297 g3 I1 sg7 I8 sg6 I309 ssI311 (dp298 g3 I1 sg7 I8 sg6 I311 ssI313 (dp299 g3 I0 sg4 V814(\u71d5\u90ca\u4e0a\u4e0a\u57ce\u4e94\u671f-\u5927\u5317\u7a91\u5357) p300 sg6 I313 sg7 I2 ssI315 (dp301 g3 I0 sg4 V821(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5c0f\u5468\u6613\u6751) p302 sg6 I315 sg7 I2 ssI317 (dp303 g3 I0 sg4 V\u8fd0\u901a121(\u534e\u7eba\u6613\u57ce\u516c\u4ea4\u573a\u7ad9-\u516b\u738b\u575f\u4e1c) p304 sg6 I317 sg7 I25 ssI319 (dp305 g3 I0 sg4 V968(\u6d77\u5b50\u89d2-\u7ecf\u6d4e\u9002\u7528\u623f) p306 sg6 I319 sg7 I16 ssI321 (dp307 g3 I0 sg4 V\u8fd0\u901a109(\u897f\u4e09\u65d7-\u91d1\u5e84) p308 sg6 I321 sg7 I25 ssI323 (dp309 g3 I0 sg4 V\u8fd0\u901a114(\u53f2\u5404\u5e84-\u5434\u5e84) p310 sg6 I323 sg7 I21 ssI325 (dp311 g3 I0 sg4 V982(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u571f\u4e95\u6751\u897f\u53e3) p312 sg6 I325 sg7 I21 ssI327 (dp313 g3 I0 sg4 V919\u5feb(\u4eac\u5f20\u8def\u53e3\u5317-\u5fb7\u80dc\u95e8) p314 sg6 I327 sg7 I25 ssI329 (dp315 g3 I1 sg7 I23 sg6 I329 ssI331 (dp316 g3 I0 sg4 V919(\u5fb7\u80dc\u95e8-\u4f53\u80b2\u573a\u5c0f\u533a) p317 sg6 I331 sg7 I21 ssI333 (dp318 g3 I0 sg4 V370(\u516c\u4e3b\u575f\u897f-\u95e8\u5934\u6c9f\u5708\u95e8) p319 sg6 I333 sg7 I2 ssI335 (dp320 g3 I0 sg4 V42(\u5e7f\u5916\u7518\u77f3\u6865-\u4e1c\u56db\u5341\u6761\u6865) p321 sg6 I335 sg7 I25 ssI337 (dp322 g3 I0 sg4 V414(\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9-\u67f3\u6751) p323 sg6 I337 sg7 I25 ssI339 (dp324 g3 I0 sg4 V817(\u90ce\u5bb6\u56ed-\u5927\u5382) p325 sg6 I339 sg7 I2 ssI341 (dp326 g3 I1 sg7 I10 sg6 I341 ssI343 (dp327 g3 I0 sg4 V\u8fd0\u901a103(\u5927\u7ea2\u95e8\u670d\u88c5\u57ce-\u897f\u4e09\u65d7) p328 sg6 I343 sg7 I2 ssI345 (dp329 g3 I0 sg4 V927(\u6728\u6a28\u56ed\u6865\u4e1c-\u5218\u5e84) p330 sg6 I345 sg7 I21 ssI347 (dp331 g3 I0 sg4 V967(\u9e3f\u76ca\u9a7e\u6821-\u82b1\u56ed\u6865\u5357) p332 sg6 I347 sg7 I2 ssI349 (dp333 g3 I0 sg4 V915(\u987a\u4e49\u5357\u5f69\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p334 sg6 I349 sg7 I21 ssI351 (dp335 g3 I0 sg4 V821(\u5c0f\u5468\u6613\u6751-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p336 sg6 I351 sg7 I2 ssI353 (dp337 g3 I0 sg4 V\u8fd0\u901a124(\u91d1\u5e84-\u53a2\u767d\u65d7\u6865) p338 sg6 I353 sg7 I25 ssI355 (dp339 g3 I0 sg4 V\u8fd0\u901a124(\u53a2\u767d\u65d7\u6865-\u91d1\u5e84) p340 sg6 I355 sg7 I25 ssI357 (dp341 g3 I0 sg4 V982(\u571f\u4e95\u6751\u897f\u53e3-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p342 sg6 I357 sg7 I21 ssI359 (dp343 g3 I0 sg4 V952(\u4e1c\u57e0\u5934\u6751-\u6c34\u58a8\u6797\u6eaa\u516c\u4ea4\u573a\u7ad9) p344 sg6 I359 sg7 I2 ssI361 (dp345 g3 I0 sg4 V\u8fd0\u901a121(\u516b\u738b\u575f\u4e1c-\u534e\u7eba\u6613\u57ce\u516c\u4ea4\u573a\u7ad9) p346 sg6 I361 sg7 I25 ssI363 (dp347 g3 I0 sg4 V968(\u7ecf\u6d4e\u9002\u7528\u623f-\u6d77\u5b50\u89d2) p348 sg6 I363 sg7 I16 ssI365 (dp349 g3 I0 sg4 V849(\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9-\u56fa\u5b89\u897f\u7ad9) p350 sg6 I365 sg7 I2 ssI367 (dp351 g3 I0 sg4 V\u8fd0\u901a113(\u5434\u5e84-\u6765\u5e7f\u8425\u5317) p352 sg6 I367 sg7 I2 ssI369 (dp353 g3 I0 sg4 V\u8fd0\u901a105(\u4e2d\u82d1\u5bbe\u9986-\u4e0a\u5730\u4e94\u8857\u4e1c\u53e3) p354 sg6 I369 sg7 I25 ssI371 (dp355 g3 I1 sg7 I10 sg6 I371 ssI373 (dp356 g3 I0 sg4 V848(\u6d77\u5b50\u89d2\uff08\u7eff\u8272\u5e84\u56ed\uff09-\u9a6c\u7538\u6865\u897f) p357 sg6 I373 sg7 I2 ssI375 (dp358 g3 I0 sg4 V\u8fd0\u901a112(\u53f2\u5404\u5e84-\u84dd\u9f99\u5bb6\u56ed) p359 sg6 I375 sg7 I21 ssI377 (dp360 g3 I0 sg4 V\u8fd0\u901a116(\u84dd\u9f99\u5bb6\u56ed-\u82f9\u679c\u56ed\u5357\u8def\u4e1c\u53e3) p361 sg6 I377 sg7 I25 ssI379 (dp362 g3 I1 sg7 I10 sg6 I379 ssI381 (dp363 g3 I0 sg4 V944(\u5976\u5b50\u623f-\u83dc\u6237\u8425\u6865\u897f) p364 sg6 I381 sg7 I2 ssI383 (dp365 g3 I0 sg4 V\u8fd0\u901a201(\u516d\u91cc\u6865\u957f\u9014\u7ad9-\u6765\u5e7f\u8425\u5317) p366 sg6 I383 sg7 I2 ssI385 (dp367 g3 I0 sg4 V814(\u5927\u5317\u7a91\u5357-\u71d5\u90ca\u4e0a\u4e0a\u57ce\u4e94\u671f) p368 sg6 I385 sg7 I2 ssI387 (dp369 g3 I0 sg4 V805(\u5eca\u574a-\u5317\u4eac\u7ad9\u4e1c) p370 sg6 I387 sg7 I21 ssI389 (dp371 g3 I0 sg4 V920(\u4e0b\u8425-\u59ab\u6c34\u5317\u8857\u5357) p372 sg6 I389 sg7 I21 ssI391 (dp373 g3 I0 sg4 V876(\u5ef6\u5e86\u706b\u8f66\u7ad9\u5317\u5e7f\u573a-\u5eb7\u5e84\u5c0f\u533a) p374 sg6 I391 sg7 I21 ssI393 (dp375 g3 I0 sg4 V921\uff08\u5ef6\u5e86\u5730\u533a\uff09(\u5eb7\u5e84\u5c0f\u533a-\u5ef6\u5e86\u706b\u8f66\u7ad9\u5317\u5e7f\u573a) p376 sg6 I393 sg7 I3 ssI395 (dp377 g3 I0 sg4 V811(\u516b\u738b\u575f\u897f-\u71d5\u90ca\u51b6\u91d1\u4e00\u5c40) p378 sg6 I395 sg7 I3 ssI397 (dp379 g3 I0 sg4 V876(\u5eb7\u5e84\u5c0f\u533a-\u5ef6\u5e86\u706b\u8f66\u7ad9\u5317\u5e7f\u573a) p380 sg6 I397 sg7 I21 ssI399 (dp381 g3 I0 sg4 V874\uff08\u5ef6\u5e86\u5730\u533a\uff09(\u6c38\u5b81\u5357\u5173-\u5ddd\u5317\u5c0f\u533a\u5357\u95e8) p382 sg6 I399 sg7 I3 ssI401 (dp383 g3 I0 sg4 V810(\u9999\u6cb3\u603b\u7ad9-\u5927\u5317\u7a91\u4e1c) p384 sg6 I401 sg7 I3 ssI403 (dp385 g3 I0 sg4 V855(\u4e1c\u76f4\u95e8\u5916-\u9a6c\u5761\u82b1\u56ed) p386 sg6 I403 sg7 I3 ssI405 (dp387 g3 I0 sg4 V804(\u6768\u6d3c-\u5317\u4eac\u7ad9\u4e1c) p388 sg6 I405 sg7 I16 ssI407 (dp389 g3 I0 sg4 V886(\u660c\u5e73\u4e1c\u5173-\u5fb7\u80dc\u95e8\u897f) p390 sg6 I407 sg7 I25 ssI409 (dp391 g3 I0 sg4 V921\uff08\u5ef6\u5e86\u5730\u533a\uff09(\u5ef6\u5e86\u706b\u8f66\u7ad9\u5317\u5e7f\u573a-\u5eb7\u5e84\u5c0f\u533a) p392 sg6 I409 sg7 I3 ssI411 (dp393 g3 I0 sg4 V804(\u5317\u4eac\u7ad9\u524d\u8857-\u6768\u6d3c) p394 sg6 I411 sg7 I3 ssI413 (dp395 g3 I0 sg4 V807(\u571f\u6865\u6751-\u5927\u5317\u7a91\u5357) p396 sg6 I413 sg7 I16 ssI415 (dp397 g3 I0 sg4 V855(\u9a6c\u5761\u82b1\u56ed-\u4e1c\u76f4\u95e8\u5916) p398 sg6 I415 sg7 I3 ssI417 (dp399 g3 I0 sg4 V810(\u5927\u5317\u7a91\u5357-\u9999\u6cb3\u603b\u7ad9) p400 sg6 I417 sg7 I3 ssI419 (dp401 g3 I0 sg4 V886(\u5fb7\u80dc\u95e8\u897f-\u660c\u5e73\u4e1c\u5173) p402 sg6 I419 sg7 I25 ssI421 (dp403 g3 I0 sg4 V808(\u5927\u5317\u7a91\u5357-\u4f70\u5bcc\u82d1) p404 sg6 I421 sg7 I21 ssI423 (dp405 g3 I0 sg4 V875(\u59ab\u6c34\u5317\u8857\u5357-\u6c38\u5b81\u8f66\u7ad9) p406 sg6 I423 sg7 I21 ssI425 (dp407 g3 I0 sg4 V811(\u71d5\u90ca\u51b6\u91d1\u4e00\u5c40-\u516b\u738b\u575f\u897f) p408 sg6 I425 sg7 I3 ssI427 (dp409 g3 I0 sg4 V818(\u5929\u6d0b\u57ce\u603b\u7ad9-\u5927\u5317\u7a91\u5357) p410 sg6 I427 sg7 I21 ssI429 (dp411 g3 I0 sg4 V851(\u57ce\u94c1\u671b\u4eac\u897f\u7ad9-\u9ed1\u6865\u5357\u7ad9) p412 sg6 I429 sg7 I27 ssI431 (dp413 g3 I0 sg4 V816(\u5927\u5382-\u90ce\u5bb6\u56ed) p414 sg6 I431 sg7 I3 ssI433 (dp415 g3 I0 sg4 V818(\u90ce\u5bb6\u56ed-\u5929\u6d0b\u57ce\u603b\u7ad9) p416 sg6 I433 sg7 I21 ssI435 (dp417 g3 I0 sg4 V808(\u4f70\u5bcc\u82d1-\u5927\u5317\u7a91\u5357) p418 sg6 I435 sg7 I21 ssI437 (dp419 g3 I0 sg4 V874\uff08\u5ef6\u5e86\u5730\u533a\uff09(\u5ddd\u5317\u5c0f\u533a\u5357\u95e8-\u6c38\u5b81\u5357\u5173) p420 sg6 I437 sg7 I3 ssI439 (dp421 g3 I0 sg4 V851(\u9ed1\u6865\u5357\u7ad9-\u57ce\u94c1\u671b\u4eac\u897f\u7ad9) p422 sg6 I439 sg7 I27 ssI441 (dp423 g3 I0 sg4 V875(\u6c38\u5b81\u8f66\u7ad9-\u59ab\u6c34\u5317\u8857\u5357) p424 sg6 I441 sg7 I21 ssI443 (dp425 g3 I0 sg4 V816(\u90ce\u5bb6\u56ed-\u5927\u5382) p426 sg6 I443 sg7 I3 ssI445 (dp427 g3 I0 sg4 V920(\u59ab\u6c34\u5317\u8857\u5357-\u4e0b\u8425) p428 sg6 I445 sg7 I21 ssI447 (dp429 g3 I0 sg4 V807(\u5927\u5317\u7a91\u5357-\u571f\u6865\u6751) p430 sg6 I447 sg7 I10 ssI449 (dp431 g3 I1 sg7 I23 sg6 I449 ssI451 (dp432 g3 I1 sg7 I23 sg6 I451 ssI453 (dp433 g3 I0 sg4 V913(\u6c99\u5b50\u8425\u6c7d\u8f66\u7ad9-\u6d77\u6dc0\u6865\u4e1c) p434 sg6 I453 sg7 I25 ssI455 (dp435 g3 I0 sg4 V913(\u6d77\u6dc0\u6865\u4e1c-\u6c99\u5b50\u8425\u6c7d\u8f66\u7ad9) p436 sg6 I455 sg7 I16 ssI457 (dp437 g3 I0 sg4 V986(\u5927\u5730\u7ad9-\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9) p438 sg6 I457 sg7 I9 ssI459 (dp439 g3 I0 sg4 V938\u9999\u6cb3\u5feb(\u9999\u6cb3\u603b\u7ad9-\u5317\u4eac\u7ad9\u4e1c) p440 sg6 I459 sg7 I21 ssI461 (dp441 g3 I0 sg4 V926(\u540e\u752b-\u6c38\u5b9a\u95e8\u5185) p442 sg6 I461 sg7 I9 ssI463 (dp443 g3 I0 sg4 V941\u5feb(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u4e2d\u95e8\u5bfa\u751f\u6001\u56ed) p444 sg6 I463 sg7 I9 ssI465 (dp445 g3 I0 sg4 V942(\u4e1c\u76f4\u95e8\u5916-\u8336\u575e\u706b\u8f66\u7ad9) p446 sg6 I465 sg7 I21 ssI467 (dp447 g3 I0 sg4 V954(\u5927\u5317\u7a91\u5357-\u5927\u5174\u4e00\u804c) p448 sg6 I467 sg7 I9 ssI469 (dp449 g3 I0 sg4 V926(\u6c38\u5b9a\u95e8\u5185-\u540e\u752b) p450 sg6 I469 sg7 I9 ssI471 (dp451 g3 I0 sg4 V986(\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9-\u5927\u5730\u7ad9) p452 sg6 I471 sg7 I9 ssI473 (dp453 g3 I0 sg4 V942(\u8336\u575e\u706b\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p454 sg6 I473 sg7 I21 ssI475 (dp455 g3 I0 sg4 V909(\u571f\u4e95\u6751\u897f\u53e3-\u957f\u5efa\u9a7e\u6821) p456 sg6 I475 sg7 I9 ssI477 (dp457 g3 I0 sg4 V937(\u5357\u793c\u58eb\u8def-\u5927\u5174\u897f\u80e1\u6797) p458 sg6 I477 sg7 I9 ssI479 (dp459 g3 I0 sg4 V992(\u897f\u8f9b\u623f-\u5df4\u6c9f\u6751) p460 sg6 I479 sg7 I21 ssI481 (dp461 g3 I0 sg4 V938\u9999\u6cb3\u5feb(\u5317\u4eac\u7ad9\u4e1c-\u9999\u6cb3\u603b\u7ad9) p462 sg6 I481 sg7 I21 ssI483 (dp463 g3 I0 sg4 V954(\u5927\u5174\u4e00\u804c-\u5927\u5317\u7a91\u5357) p464 sg6 I483 sg7 I9 ssI485 (dp465 g3 I0 sg4 V937(\u5927\u5174\u897f\u80e1\u6797-\u5357\u793c\u58eb\u8def) p466 sg6 I485 sg7 I9 ssI487 (dp467 g3 I0 sg4 V941\u5feb(\u4e2d\u95e8\u5bfa\u751f\u6001\u56ed-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p468 sg6 I487 sg7 I9 ssI489 (dp469 g3 I0 sg4 V909(\u957f\u5efa\u9a7e\u6821-\u571f\u4e95\u6751\u897f\u53e3) p470 sg6 I489 sg7 I9 ssI491 (dp471 g3 I0 sg4 V992(\u5df4\u6c9f\u6751-\u897f\u8f9b\u623f) p472 sg6 I491 sg7 I21 ssI493 (dp473 g3 I0 sg4 V989(\u56db\u60e0\u67a2\u7ebd\u7ad9-\u987a\u4e49\u534a\u58c1\u5e97) p474 sg6 I493 sg7 I9 ssI495 (dp475 g3 I0 sg4 V989(\u987a\u4e49\u534a\u58c1\u5e97-\u56db\u60e0\u67a2\u7ebd\u7ad9) p476 sg6 I495 sg7 I9 ssI497 (dp477 g3 I0 sg4 V939(\u575d\u6cb3-\u4e0a\u8f9b\u5821\u4fe1\u7528\u793e) p478 sg6 I497 sg7 I10 ssI499 (dp479 g3 I1 sg7 I23 sg6 I499 ssI501 (dp480 g3 I0 sg4 V991(\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9-\u9752\u5e74\u8def\u53e3) p481 sg6 I501 sg7 I16 ssI503 (dp482 g3 I0 sg4 V1(\u56db\u60e0\u67a2\u7ebd\u7ad9-\u8001\u5c71\u516c\u4ea4\u573a\u7ad9) p483 sg6 I503 sg7 I35 ssI505 (dp484 g3 I0 sg4 V1(\u8001\u5c71\u516c\u4ea4\u573a\u7ad9-\u56db\u60e0\u67a2\u7ebd\u7ad9) p485 sg6 I505 sg7 I35 ssI507 (dp486 g3 I1 sg7 I32 sg6 I507 ssI509 (dp487 g3 I1 sg7 I32 sg6 I509 ssI511 (dp488 g3 I0 sg4 V991(\u9752\u5e74\u8def\u53e3-\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9) p489 sg6 I511 sg7 I16 ssI513 (dp490 g3 I1 sg7 I23 sg6 I513 ssI515 (dp491 g3 I0 sg4 V935\u5feb(\u4e1c\u76f4\u95e8-\u738b\u5bb6\u573a) p492 sg6 I515 sg7 I16 ssI517 (dp493 g3 I0 sg4 V939(\u4e0a\u8f9b\u5821\u4fe1\u7528\u793e-\u575d\u6cb3) p494 sg6 I517 sg7 I10 ssI519 (dp495 g3 I0 sg4 V935\u5feb(\u738b\u5bb6\u573a-\u4e1c\u76f4\u95e8) p496 sg6 I519 sg7 I10 ssI521 (dp497 g3 I0 sg4 V347(\u65b0\u8857\u53e3\u8c41\u53e3-\u516b\u5927\u5904) p498 sg6 I521 sg7 I25 ssI523 (dp499 g3 I0 sg4 V854(\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9-\u57ce\u94c1\u671b\u4eac\u897f\u7ad9) p500 sg6 I523 sg7 I11 ssI525 (dp501 g3 I1 sg7 I25 sg6 I525 ssI527 (dp502 g3 I1 sg7 I38 sg6 I527 ssI529 (dp503 g3 I1 sg7 I25 sg6 I529 ssI531 (dp504 g3 I0 sg4 V103\u7535\u8f66(\u5317\u4eac\u7ad9\u897f-\u52a8\u7269\u56ed\uff08\u67a2\u7ebd\u7ad9\uff09) p505 sg6 I531 sg7 I25 ssI533 (dp506 g3 I0 sg4 V960(\u77f3\u5382\u6751-\u897f\u8f9b\u623f) p507 sg6 I533 sg7 I11 ssI535 (dp508 g3 I1 sg7 I25 sg6 I535 ssI537 (dp509 g3 I0 sg4 V48(\u57ce\u5357\u5609\u56ed\u5317-\u524d\u95e8) p510 sg6 I537 sg7 I25 ssI539 (dp511 g3 I0 sg4 V7(\u4e94\u95f4\u697c-\u52a8\u7269\u56ed\uff08\u67a2\u7ebd\u7ad9\uff09) p512 sg6 I539 sg7 I11 ssI541 (dp513 g3 I1 sg7 I23 sg6 I541 ssI543 (dp514 g3 I1 sg7 I25 sg6 I543 ssI545 (dp515 g3 I0 sg4 V103\u7535\u8f66(\u52a8\u7269\u56ed\uff08\u67a2\u7ebd\u7ad9\uff09-\u5317\u4eac\u7ad9\u897f) p516 sg6 I545 sg7 I25 ssI547 (dp517 g3 I0 sg4 V16(\u897f\u76f4\u95e8\u5916-\u4e8c\u91cc\u5e84) p518 sg6 I547 sg7 I35 ssI549 (dp519 g3 I1 sg7 I36 sg6 I549 ssI551 (dp520 g3 I0 sg4 V854(\u57ce\u94c1\u671b\u4eac\u897f\u7ad9-\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9) p521 sg6 I551 sg7 I11 ssI553 (dp522 g3 I1 sg7 I38 sg6 I553 ssI555 (dp523 g3 I0 sg4 V16(\u4e8c\u91cc\u5e84-\u897f\u76f4\u95e8\u5916) p524 sg6 I555 sg7 I35 ssI557 (dp525 g3 I0 sg4 V7(\u52a8\u7269\u56ed\uff08\u67a2\u7ebd\u7ad9\uff09-\u4e94\u95f4\u697c) p526 sg6 I557 sg7 I11 ssI559 (dp527 g3 I0 sg4 V960(\u897f\u8f9b\u623f-\u77f3\u5382\u6751) p528 sg6 I559 sg7 I11 ssI561 (dp529 g3 I0 sg4 V981(\u5e38\u9752\u56ed\u897f\u95e8-\u7d2b\u91d1\u8def\u5357\u53e3) p530 sg6 I561 sg7 I11 ssI563 (dp531 g3 I1 sg7 I36 sg6 I563 ssI565 (dp532 g3 I0 sg4 V959(\u516c\u4ea4\u9a7e\u6821-\u77f3\u5382\u6751) p533 sg6 I565 sg7 I11 ssI567 (dp534 g3 I0 sg4 V347(\u516b\u5927\u5904-\u65b0\u8857\u53e3\u8c41\u53e3) p535 sg6 I567 sg7 I25 ssI569 (dp536 g3 I0 sg4 V981(\u7d2b\u91d1\u8def\u5357\u53e3-\u5e38\u9752\u56ed\u897f\u95e8) p537 sg6 I569 sg7 I11 ssI571 (dp538 g3 I0 sg4 V959(\u77f3\u5382\u6751-\u516c\u4ea4\u9a7e\u6821) p539 sg6 I571 sg7 I11 ssI573 (dp540 g3 I0 sg4 V48(\u524d\u95e8-\u57ce\u5357\u5609\u56ed\u5317) p541 sg6 I573 sg7 I25 ssI575 (dp542 g3 I1 sg7 I23 sg6 I575 ssI577 (dp543 g3 I0 sg4 V\u8fd0\u901a205(\u57ce\u94c1\u4e0a\u5730\u7ad9-\u53f2\u5404\u5e84) p544 sg6 I577 sg7 I12 ssI579 (dp545 g3 I0 sg4 V\u8fd0\u901a205(\u53f2\u5404\u5e84-\u57ce\u94c1\u4e0a\u5730\u7ad9) p546 sg6 I579 sg7 I12 ssI581 (dp547 g3 I0 sg4 V888\u5feb(\u660c\u5e73\u4e1c\u5173-\u5fb7\u80dc\u95e8\u897f) p548 sg6 I581 sg7 I25 ssI583 (dp549 g3 I0 sg4 V888\u5feb(\u5fb7\u80dc\u95e8\u897f-\u660c\u5e73\u4e1c\u5173) p550 sg6 I583 sg7 I25 ssI585 (dp551 g3 I0 sg4 V983(\u4e1c\u7a91\u6751-\u738b\u4f50\u6c7d\u8f66\u7ad9) p552 sg6 I585 sg7 I15 ssI587 (dp553 g3 I0 sg4 V33(\u8fdc\u5927\u8def\u4e1c\u53e3-\u516c\u4e3b\u575f\u897f) p554 sg6 I587 sg7 I30 ssI589 (dp555 g3 I0 sg4 V413(\u5357\u5341\u91cc\u5c45-\u4e1c\u76f4\u95e8) p556 sg6 I589 sg7 I25 ssI591 (dp557 g3 I0 sg4 V880\u5feb\u8f66[\u6dbf\u9e7f](\u5fb7\u80dc\u95e8-\u6dbf\u9e7f) p558 sg6 I591 sg7 I14 ssI593 (dp559 g3 I0 sg4 V880\u5feb\u8f66[\u6dbf\u9e7f](\u6dbf\u9e7f-\u5fb7\u80dc\u95e8) p560 sg6 I593 sg7 I14 ssI595 (dp561 g3 I1 sg7 I25 sg6 I595 ssI597 (dp562 g3 I1 sg7 I25 sg6 I597 ssI599 (dp563 g3 I0 sg4 V836\u533a\u95f4[\u5927\u97e9\u7ee7](\u5927\u97e9\u7ee7-\u5929\u6865\u6c7d\u8f66\u7ad9) p564 sg6 I599 sg7 I14 ssI601 (dp565 g3 I0 sg4 V840(\u9a6c\u6751\u8f66\u7ad9-\u5357\u793c\u58eb\u8def) p566 sg6 I601 sg7 I14 ssI603 (dp567 g3 I0 sg4 V843(\u5927\u7070\u5382\u897f\u7ad9-\u5357\u793c\u58eb\u8def) p568 sg6 I603 sg7 I21 ssI605 (dp569 g3 I0 sg4 V843(\u5357\u793c\u58eb\u8def-\u5927\u7070\u5382\u897f\u7ad9) p570 sg6 I605 sg7 I21 ssI607 (dp571 g3 I0 sg4 V33(\u516c\u4e3b\u575f\u897f-\u8fdc\u5927\u8def\u4e1c\u53e3) p572 sg6 I607 sg7 I30 ssI609 (dp573 g3 I0 sg4 V413(\u4e1c\u76f4\u95e8-\u5357\u5341\u91cc\u5c45) p574 sg6 I609 sg7 I25 ssI611 (dp575 g3 I0 sg4 V983(\u738b\u4f50\u6c7d\u8f66\u7ad9-\u4e1c\u7a91\u6751) p576 sg6 I611 sg7 I15 ssI613 (dp577 g3 I0 sg4 V840(\u5357\u793c\u58eb\u8def-\u9a6c\u6751\u8f66\u7ad9) p578 sg6 I613 sg7 I14 ssI615 (dp579 g3 I0 sg4 V888(\u87d2\u5c71\u56fd\u5bb6\u68ee\u6797\u516c\u56ed-\u5fb7\u80dc\u95e8\u897f) p580 sg6 I615 sg7 I14 ssI617 (dp581 g3 I0 sg4 V836\u533a\u95f4[\u5927\u97e9\u7ee7](\u5929\u6865\u6c7d\u8f66\u7ad9-\u5927\u97e9\u7ee7) p582 sg6 I617 sg7 I14 ssI619 (dp583 g3 I0 sg4 V888(\u5fb7\u80dc\u95e8\u897f-\u87d2\u5c71\u56fd\u5bb6\u68ee\u6797\u516c\u56ed) p584 sg6 I619 sg7 I16 ssI621 (dp585 g3 I1 sg7 I38 sg6 I621 ssI623 (dp586 g3 I1 sg7 I29 sg6 I623 ssI625 (dp587 g3 I0 sg4 V970(\u5730\u94c1\u4ff8\u4f2f\u7ad9-\u5bc6\u4e91\u6c7d\u8f66\u7ad9) p588 sg6 I625 sg7 I16 ssI627 (dp589 g3 I1 sg7 I31 sg6 I627 ssI629 (dp590 g3 I0 sg4 V916(\u6000\u67d4\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8) p591 sg6 I629 sg7 I16 ssI631 (dp592 g3 I0 sg4 V970\u5feb(\u5bc6\u4e91\u6c7d\u8f66\u7ad9-\u671b\u4eac\u897f\u7ad9) p593 sg6 I631 sg7 I16 ssI633 (dp594 g3 I0 sg4 V673(\u5317\u4eac\u897f\u7ad9-\u77f3\u5404\u5e84) p595 sg6 I633 sg7 I16 ssI635 (dp596 g3 I0 sg4 V669(\u5927\u5317\u7a91\u4e1c-\u4e07\u76db\u5317\u8857) p597 sg6 I635 sg7 I16 ssI637 (dp598 g3 I1 sg7 I38 sg6 I637 ssI639 (dp599 g3 I0 sg4 V826(\u91c7\u56db\u5c0f\u533a-\u6c38\u5b9a\u95e8\u5185) p600 sg6 I639 sg7 I16 ssI641 (dp601 g3 I1 sg7 I38 sg6 I641 ssI643 (dp602 g3 I1 sg7 I38 sg6 I643 ssI645 (dp603 g3 I0 sg4 V515(\u5730\u94c1\u5317\u571f\u57ce\u7ad9-\u4e1c\u5927\u6865\u8def\u53e3\u4e1c) p604 sg6 I645 sg7 I25 ssI647 (dp605 g3 I0 sg4 V842(\u5927\u5174\u897f\u80e1\u6797-\u4ebf\u53d1\u5de5\u4e1a\u56ed\u533a) p606 sg6 I647 sg7 I16 ssI649 (dp607 g3 I0 sg4 V866(\u4e1c\u76f4\u95e8-\u96c1\u6816\u5f00\u53d1\u533a\u6c7d\u8f66\u7ad9) p608 sg6 I649 sg7 I21 ssI651 (dp609 g3 I1 sg7 I31 sg6 I651 ssI653 (dp610 g3 I0 sg4 V809(\u4f70\u5bcc\u82d1-\u5927\u5317\u7a91\u5357) p611 sg6 I653 sg7 I16 ssI655 (dp612 g3 I1 sg7 I38 sg6 I655 ssI657 (dp613 g3 I0 sg4 V977(\u660e\u6625\u82d1-\u51af\u6751\u897f\u91cc) p614 sg6 I657 sg7 I16 ssI659 (dp615 g3 I0 sg4 V977\u5feb(\u516c\u4e3b\u575f\u5317-\u51af\u897f\u897f\u91cc) p616 sg6 I659 sg7 I16 ssI661 (dp617 g3 I0 sg4 V841(\u4e3d\u56ed\u8def\u516c\u4ea4\u7ad9-\u4f19\u8fbe\u8425\u6751) p618 sg6 I661 sg7 I16 ssI663 (dp619 g3 I1 sg7 I29 sg6 I663 ssI665 (dp620 g3 I0 sg4 V826(\u6c38\u5b9a\u95e8\u5185-\u91c7\u56db\u5c0f\u533a) p621 sg6 I665 sg7 I16 ssI667 (dp622 g3 I1 sg7 I31 sg6 I667 ssI669 (dp623 g3 I0 sg4 V515(\u4e1c\u5927\u6865\u8def\u53e3\u4e1c-\u5730\u94c1\u5317\u571f\u57ce\u7ad9) p624 sg6 I669 sg7 I25 ssI671 (dp625 g3 I0 sg4 V\u72796(\u5317\u4eac\u897f\u7ad9-\u97e9\u5bb6\u5ddd\u5357\u7ad9) p626 sg6 I671 sg7 I16 ssI673 (dp627 g3 I1 sg7 I31 sg6 I673 ssI675 (dp628 g3 I0 sg4 V846(\u5927\u5317\u7a91\u5357-\u6768\u79c0\u5e97) p629 sg6 I675 sg7 I16 ssI677 (dp630 g3 I0 sg4 V841(\u4f19\u8fbe\u8425\u6751-\u4e3d\u56ed\u8def\u516c\u4ea4\u7ad9) p631 sg6 I677 sg7 I16 ssI679 (dp632 g3 I0 sg4 V130(\u4e1c\u6e56-\u5317\u5b98\u5385) p633 sg6 I679 sg7 I37 ssI681 (dp634 g3 I0 sg4 V827(\u5317\u4eac\u7ad9\u4e1c-\u5927\u5174\u897f\u5e84) p635 sg6 I681 sg7 I21 ssI683 (dp636 g3 I0 sg4 V119(\u5b89\u5b9a\u95e8-\u57ce\u94c1\u828d\u836f\u5c45\u7ad9) p637 sg6 I683 sg7 I25 ssI685 (dp638 g3 I0 sg4 V842(\u4ebf\u53d1\u5de5\u4e1a\u56ed\u533a-\u5927\u5174\u897f\u80e1\u6797) p639 sg6 I685 sg7 I16 ssI687 (dp640 g3 I0 sg4 V809(\u5927\u5317\u7a91\u5357-\u4f70\u5bcc\u82d1) p641 sg6 I687 sg7 I16 ssI689 (dp642 g3 I0 sg4 V916\u5feb(\u4e1c\u76f4\u95e8-\u6000\u67d4\u6c7d\u8f66\u7ad9) p643 sg6 I689 sg7 I16 ssI691 (dp644 g3 I0 sg4 V916(\u4e1c\u76f4\u95e8-\u6000\u67d4\u6c7d\u8f66\u7ad9) p645 sg6 I691 sg7 I16 ssI693 (dp646 g3 I0 sg4 V671(\u56db\u60e0\u7ad9-\u897f\u82d1) p647 sg6 I693 sg7 I16 ssI695 (dp648 g3 I1 sg7 I38 sg6 I695 ssI697 (dp649 g3 I0 sg4 V890(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u4e0b\u82c7\u7538) p650 sg6 I697 sg7 I16 ssI699 (dp651 g3 I0 sg4 V880\u533a\u95f4[\u8de8\u7701](\u534e\u4fa8\u519c\u573a-\u5fb7\u80dc\u95e8) p652 sg6 I699 sg7 I26 ssI701 (dp653 g3 I0 sg4 V970\u5feb(\u671b\u4eac\u897f\u7ad9-\u5bc6\u4e91\u6c7d\u8f66\u7ad9) p654 sg6 I701 sg7 I16 ssI703 (dp655 g3 I0 sg4 V671(\u897f\u82d1-\u56db\u60e0\u7ad9) p656 sg6 I703 sg7 I16 ssI705 (dp657 g3 I0 sg4 V977\u5feb(\u51af\u897f\u897f\u91cc-\u516c\u4e3b\u575f\u5317) p658 sg6 I705 sg7 I16 ssI707 (dp659 g3 I0 sg4 V61(\u5929\u9999\u9890\u5317\u91cc-\u961c\u6210\u95e8\u5185) p660 sg6 I707 sg7 I25 ssI709 (dp661 g3 I0 sg4 V890(\u4e0b\u82c7\u7538-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p662 sg6 I709 sg7 I16 ssI711 (dp663 g3 I0 sg4 V916\u5feb(\u6000\u67d4\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8) p664 sg6 I711 sg7 I16 ssI713 (dp665 g3 I0 sg4 V669(\u4e07\u76db\u5317\u8857-\u5927\u5317\u7a91\u4e1c) p666 sg6 I713 sg7 I16 ssI715 (dp667 g3 I0 sg4 V885(\u79ef\u6c34\u6f6d\u6865\u4e1c-\u660c\u5e73\u4f55\u8425\u7ad9) p668 sg6 I715 sg7 I25 ssI717 (dp669 g3 I0 sg4 V827(\u5927\u5174\u897f\u5e84-\u5317\u4eac\u7ad9\u4e1c) p670 sg6 I717 sg7 I21 ssI719 (dp671 g3 I0 sg4 V846(\u6768\u79c0\u5e97-\u5927\u5317\u7a91\u5357) p672 sg6 I719 sg7 I16 ssI721 (dp673 g3 I0 sg4 V970(\u5bc6\u4e91\u6c7d\u8f66\u7ad9-\u5730\u94c1\u4ff8\u4f2f\u7ad9) p674 sg6 I721 sg7 I16 ssI723 (dp675 g3 I0 sg4 V885(\u660c\u5e73\u4f55\u8425\u7ad9-\u79ef\u6c34\u6f6d\u6865\u4e1c) p676 sg6 I723 sg7 I25 ssI725 (dp677 g3 I0 sg4 V880\u533a\u95f4[\u8de8\u7701](\u5fb7\u80dc\u95e8-\u534e\u4fa8\u519c\u573a) p678 sg6 I725 sg7 I26 ssI727 (dp679 g3 I0 sg4 V119(\u57ce\u94c1\u828d\u836f\u5c45\u7ad9-\u5b89\u5b9a\u95e8) p680 sg6 I727 sg7 I25 ssI729 (dp681 g3 I0 sg4 V\u72796(\u97e9\u5bb6\u5ddd\u5357\u7ad9-\u5317\u4eac\u897f\u7ad9) p682 sg6 I729 sg7 I16 ssI731 (dp683 g3 I0 sg4 V130(\u5317\u5b98\u5385-\u4e1c\u6e56) p684 sg6 I731 sg7 I37 ssI733 (dp685 g3 I0 sg4 V866(\u96c1\u6816\u5f00\u53d1\u533a\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8) p686 sg6 I733 sg7 I21 ssI735 (dp687 g3 I0 sg4 V977(\u51af\u6751\u897f\u91cc-\u660e\u6625\u82d1) p688 sg6 I735 sg7 I16 ssI737 (dp689 g3 I0 sg4 V987(\u4e91\u9f99\u6da7\u98ce\u666f\u533a-\u671b\u4eac\u897f\u7ad9) p690 sg6 I737 sg7 I16 ssI739 (dp691 g3 I0 sg4 V673(\u77f3\u5404\u5e84-\u5317\u4eac\u897f\u7ad9) p692 sg6 I739 sg7 I16 ssI741 (dp693 g3 I0 sg4 V987(\u671b\u4eac\u897f\u7ad9-\u4e91\u9f99\u6da7\u98ce\u666f\u533a) p694 sg6 I741 sg7 I16 ssI743 (dp695 g3 I0 sg4 V61(\u961c\u6210\u95e8\u5185-\u5929\u9999\u9890\u5317\u91cc) p696 sg6 I743 sg7 I25 ssI745 (dp697 g3 I0 sg4 V\u591c2(\u7941\u5bb6\u8c41\u5b50-\u4e07\u6e90\u8def) p698 sg6 I745 sg7 I18 ssI747 (dp699 g3 I0 sg4 V836\u533a\u95f4[\u5f20\u574a](\u5929\u6865\u6c7d\u8f66\u7ad9-\u5f20\u574a) p700 sg6 I747 sg7 I18 ssI749 (dp701 g3 I0 sg4 V955(\u4e1c\u65b9\u592a\u9633\u57ce-\u4e1c\u76f4\u95e8\u5916) p702 sg6 I749 sg7 I18 ssI751 (dp703 g3 I0 sg4 V833(\u6cb3\u5317\u5e84-\u9001\u53d8\u7535\u516c\u53f8\u8def\u53e3\u897f) p704 sg6 I751 sg7 I18 ssI753 (dp705 g3 I0 sg4 V\u591c22(\u897f\u7ea2\u95e8\u897f\u7ad9-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p706 sg6 I753 sg7 I18 ssI755 (dp707 g3 I0 sg4 V\u591c10\u5916(\u4e1c\u76f4\u95e8-\u4e1c\u76f4\u95e8) p708 sg6 I755 sg7 I18 ssI757 (dp709 g3 I0 sg4 V955(\u4e1c\u76f4\u95e8\u5916-\u4e1c\u65b9\u592a\u9633\u57ce) p710 sg6 I757 sg7 I18 ssI759 (dp711 g3 I0 sg4 V\u72795(\u9999\u6cc9\u73af\u5c9b-\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a) p712 sg6 I759 sg7 I18 ssI761 (dp713 g3 I0 sg4 V812(\u516b\u738b\u575f\u897f-\u71d5\u90ca\u51b6\u91d1\u4e00\u5c40) p714 sg6 I761 sg7 I18 ssI763 (dp715 g3 I0 sg4 V850(\u9a6c\u5761\u82b1\u56ed-\u4e1c\u76f4\u95e8\u5916) p716 sg6 I763 sg7 I18 ssI765 (dp717 g3 I0 sg4 V707(\u987e\u5bb6\u5e84\u6865\u897f-\u57ce\u5357\u5609\u56ed\u5317) p718 sg6 I765 sg7 I18 ssI767 (dp719 g3 I0 sg4 V923(\u5434\u96c4\u5bfa-\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9) p720 sg6 I767 sg7 I18 ssI769 (dp721 g3 I1 sg7 I25 sg6 I769 ssI771 (dp722 g3 I0 sg4 V\u72794(\u524d\u95e8-\u56fd\u9632\u5927\u5b66) p723 sg6 I771 sg7 I18 ssI773 (dp724 g3 I0 sg4 V\u591c32(\u4e1c\u6e56-\u5317\u5b98\u5385) p725 sg6 I773 sg7 I18 ssI775 (dp726 g3 I0 sg4 V\u591c15(\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p727 sg6 I775 sg7 I18 ssI777 (dp728 g3 I0 sg4 V\u591c24(\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a-\u548c\u5e73\u4e1c\u6865\u5357) p729 sg6 I777 sg7 I18 ssI779 (dp730 g3 I0 sg4 V825(\u5730\u94c1\u65e7\u5bab\u7ad9-\u5730\u94c1\u516c\u76ca\u897f\u6865\u7ad9) p731 sg6 I779 sg7 I21 ssI781 (dp732 g3 I0 sg4 V\u72794(\u56fd\u9632\u5927\u5b66-\u524d\u95e8) p733 sg6 I781 sg7 I18 ssI783 (dp734 g3 I0 sg4 V\u591c11(\u7fe0\u6797\u5c0f\u533a-\u9f99\u6f6d\u516c\u56ed) p735 sg6 I783 sg7 I18 ssI785 (dp736 g3 I0 sg4 V\u591c34(\u5317\u4eac\u534e\u4fa8\u57ce-\u6167\u5fe0\u91cc) p737 sg6 I785 sg7 I18 ssI787 (dp738 g3 I0 sg4 V918(\u4e1c\u76f4\u95e8\u67a2\u7ebd\u7ad9-\u5e73\u8c37\u6c7d\u8f66\u7ad9) p739 sg6 I787 sg7 I37 ssI789 (dp740 g3 I0 sg4 V113(\u7941\u5bb6\u8c41\u5b50-\u5927\u5317\u7a91) p741 sg6 I789 sg7 I25 ssI791 (dp742 g3 I0 sg4 V\u591c36(\u5bcc\u4e30\u6865\u897f-\u548c\u5e73\u4e1c\u6865\u5357) p743 sg6 I791 sg7 I18 ssI793 (dp744 g3 I0 sg4 V\u591c10\u5185(\u4e1c\u76f4\u95e8-\u4e1c\u76f4\u95e8) p745 sg6 I793 sg7 I18 ssI795 (dp746 g3 I0 sg4 V\u591c12(\u56db\u5b63\u9752\u6865\u5357-\u57ce\u5357\u5609\u56ed\u5317) p747 sg6 I795 sg7 I18 ssI797 (dp748 g3 I0 sg4 V\u591c8(\u9890\u548c\u56ed-\u5c0f\u9a6c\u5382) p749 sg6 I797 sg7 I18 ssI799 (dp750 g3 I0 sg4 V\u72795(\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a-\u9999\u6cc9\u73af\u5c9b) p751 sg6 I799 sg7 I18 ssI801 (dp752 g3 I0 sg4 V935(\u4e1c\u76f4\u95e8\u5916-\u987a\u4e49\u534a\u58c1\u5e97) p753 sg6 I801 sg7 I18 ssI803 (dp754 g3 I0 sg4 V\u591c4(\u83dc\u6237\u8425\u6865\u4e1c-\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3) p755 sg6 I803 sg7 I18 ssI805 (dp756 g3 I0 sg4 V509(\u57ce\u94c1\u897f\u4e8c\u65d7\u7ad9-\u897f\u82d1) p757 sg6 I805 sg7 I25 ssI807 (dp758 g3 I0 sg4 V\u591c1(\u56db\u60e0\u67a2\u7ebd\u7ad9-\u8001\u5c71\u516c\u4ea4\u573a\u7ad9) p759 sg6 I807 sg7 I18 ssI809 (dp760 g3 I0 sg4 V\u591c9(\u5df4\u6c9f\u6751-\u6167\u5fe0\u91cc) p761 sg6 I809 sg7 I18 ssI811 (dp762 g3 I0 sg4 V\u591c20\u5916(\u5317\u5b98\u5385-\u5317\u5b98\u5385) p763 sg6 I811 sg7 I18 ssI813 (dp764 g3 I0 sg4 V\u591c13(\u7518\u9732\u56ed-\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9) p765 sg6 I813 sg7 I18 ssI815 (dp766 g3 I0 sg4 V\u591c34(\u6167\u5fe0\u91cc-\u5317\u4eac\u534e\u4fa8\u57ce) p767 sg6 I815 sg7 I18 ssI817 (dp768 g3 I0 sg4 V\u591c20\u5185(\u5317\u5b98\u5385-\u5317\u5b98\u5385) p769 sg6 I817 sg7 I18 ssI819 (dp770 g3 I0 sg4 V667(\u5218\u5e84\u5317\u7ad9-\u5927\u5317\u7a91\u4e1c) p771 sg6 I819 sg7 I18 ssI821 (dp772 g3 I0 sg4 V\u591c9(\u6167\u5fe0\u91cc-\u5df4\u6c9f\u6751) p773 sg6 I821 sg7 I18 ssI823 (dp774 g3 I0 sg4 V936(\u4e5d\u8c37\u53e3\u6000\u5317\u6ed1\u96ea\u573a-\u4e1c\u76f4\u95e8\u5916) p775 sg6 I823 sg7 I21 ssI825 (dp776 g3 I0 sg4 V\u591c2(\u4e07\u6e90\u8def-\u7941\u5bb6\u8c41\u5b50) p777 sg6 I825 sg7 I18 ssI827 (dp778 g3 I0 sg4 V\u591c25(\u77f3\u5404\u5e84-\u5de6\u5b89\u8def) p779 sg6 I827 sg7 I18 ssI829 (dp780 g3 I0 sg4 V\u591c12(\u57ce\u5357\u5609\u56ed\u5317-\u56db\u5b63\u9752\u6865\u5357) p781 sg6 I829 sg7 I18 ssI831 (dp782 g3 I0 sg4 V918(\u5e73\u8c37\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p783 sg6 I831 sg7 I37 ssI833 (dp784 g3 I0 sg4 V\u591c17(\u5317\u4eac\u5357\u7ad9-\u5317\u4eac\u7ad9\u4e1c) p785 sg6 I833 sg7 I18 ssI835 (dp786 g3 I0 sg4 V\u591c19(\u5317\u4eac\u7ad9\u4e1c-\u5317\u4eac\u7126\u5316\u5382) p787 sg6 I835 sg7 I18 ssI837 (dp788 g3 I0 sg4 V\u591c21(\u897f\u76f4\u95e8-\u5317\u4eac\u7ad9\u4e1c) p789 sg6 I837 sg7 I18 ssI839 (dp790 g3 I0 sg4 V\u591c4(\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3-\u83dc\u6237\u8425\u6865\u4e1c) p791 sg6 I839 sg7 I18 ssI841 (dp792 g3 I0 sg4 V850(\u4e1c\u76f4\u95e8\u5916-\u9a6c\u5761\u82b1\u56ed) p793 sg6 I841 sg7 I18 ssI843 (dp794 g3 I0 sg4 V966(\u4e1c\u76f4\u95e8-\u5e73\u897f\u738b\u5e9c) p795 sg6 I843 sg7 I18 ssI845 (dp796 g3 I0 sg4 V613(\u5efa\u6b23\u82d1-\u4e94\u8def) p797 sg6 I845 sg7 I18 ssI847 (dp798 g3 I1 sg7 I40 sg6 I847 ssI849 (dp799 g3 I0 sg4 V\u591c26(\u548c\u5e73\u4e1c\u6865-\u57ce\u94c1\u5317\u82d1\u7ad9) p800 sg6 I849 sg7 I18 ssI851 (dp801 g3 I0 sg4 V\u591c30\u5185(\u5341\u91cc\u6cb3\u6865\u5357-\u5341\u91cc\u6cb3\u6865\u5317) p802 sg6 I851 sg7 I18 ssI853 (dp803 g3 I0 sg4 V\u591c18(\u57ce\u5357\u5609\u56ed\u5317-\u5de6\u5bb6\u5e84) p804 sg6 I853 sg7 I18 ssI855 (dp805 g3 I0 sg4 V\u591c15(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a) p806 sg6 I855 sg7 I18 ssI857 (dp807 g3 I0 sg4 V\u591c17(\u5317\u4eac\u7ad9\u4e1c-\u5317\u4eac\u5357\u7ad9) p808 sg6 I857 sg7 I18 ssI859 (dp809 g3 I0 sg4 V943\u8def[\u8de8\u7701](\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9-\u9738\u5dde\u706b\u8f66\u7ad9) p810 sg6 I859 sg7 I19 ssI861 (dp811 g3 I0 sg4 V966(\u5e73\u897f\u738b\u5e9c-\u4e1c\u76f4\u95e8) p812 sg6 I861 sg7 I18 ssI863 (dp813 g3 I0 sg4 V\u591c11(\u9f99\u6f6d\u516c\u56ed-\u7fe0\u6797\u5c0f\u533a) p814 sg6 I863 sg7 I18 ssI865 (dp815 g3 I1 sg7 I31 sg6 I865 ssI867 (dp816 g3 I0 sg4 V\u591c7(\u5e73\u4e50\u56ed\u5317-\u97e9\u5e84\u5b50\u5317) p817 sg6 I867 sg7 I18 ssI869 (dp818 g3 I0 sg4 V667(\u5927\u5317\u7a91\u4e1c-\u5218\u5e84\u5317\u7ad9) p819 sg6 I869 sg7 I18 ssI871 (dp820 g3 I0 sg4 V\u591c6(\u56fd\u5bb6\u4f53\u80b2\u9986-\u9752\u5e74\u8def\u5c0f\u533a) p821 sg6 I871 sg7 I18 ssI873 (dp822 g3 I0 sg4 V676(\u56e2\u6cb3\u5317\u6751-\u957f\u693f\u8857\u8def\u53e3\u897f) p823 sg6 I873 sg7 I18 ssI875 (dp824 g3 I1 sg7 I31 sg6 I875 ssI877 (dp825 g3 I0 sg4 V896(\u5218\u5bb6\u7a91\u6865\u897f-\u826f\u4e61\u68a8\u6751\u516c\u4ea4\u573a\u7ad9) p826 sg6 I877 sg7 I21 ssI879 (dp827 g3 I0 sg4 V936(\u4e1c\u76f4\u95e8\u5916-\u4e5d\u8c37\u53e3\u6000\u5317\u6ed1\u96ea\u573a) p828 sg6 I879 sg7 I21 ssI881 (dp829 g3 I0 sg4 V\u591c3(\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9-\u9752\u5e74\u8def\u5c0f\u533a) p830 sg6 I881 sg7 I18 ssI883 (dp831 g3 I0 sg4 V\u591c30\u5916(\u5341\u91cc\u6cb3\u6865\u5317-\u5341\u91cc\u6cb3\u6865\u5357) p832 sg6 I883 sg7 I18 ssI885 (dp833 g3 I0 sg4 V\u591c21(\u5317\u4eac\u7ad9\u4e1c-\u897f\u76f4\u95e8) p834 sg6 I885 sg7 I18 ssI887 (dp835 g3 I0 sg4 V\u591c16(\u6653\u6708\u82d1\u516c\u4ea4\u603b\u7ad9-\u822a\u5929\u6865\u897f) p836 sg6 I887 sg7 I18 ssI889 (dp837 g3 I0 sg4 V813(\u71d5\u90ca\u4e0a\u4e0a\u57ce\u4e94\u671f-\u5730\u94c1\u8349\u623f\u7ad9) p838 sg6 I889 sg7 I18 ssI891 (dp839 g3 I0 sg4 V715(\u56db\u60e0\u6865-\u6653\u6708\u82d1\u516c\u4ea4\u603b\u7ad9) p840 sg6 I891 sg7 I18 ssI893 (dp841 g3 I0 sg4 V\u591c5(\u7530\u987a\u5e84-\u5317\u4eac\u7ad9\u4e1c) p842 sg6 I893 sg7 I18 ssI895 (dp843 g3 I0 sg4 V980(\u4e1c\u76f4\u95e8-\u5bc6\u4e91\u6c7d\u8f66\u7ad9) p844 sg6 I895 sg7 I18 ssI897 (dp845 g3 I0 sg4 V929[\u5343\u519b\u53f0](\u5343\u519b\u53f0-\u5730\u94c1\u82f9\u679c\u56ed\u897f) p846 sg6 I897 sg7 I21 ssI899 (dp847 g3 I0 sg4 V923(\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9-\u5434\u96c4\u5bfa) p848 sg6 I899 sg7 I18 ssI901 (dp849 g3 I0 sg4 V509(\u897f\u82d1\u67a2\u7ebd\u7ad9-\u57ce\u94c1\u897f\u4e8c\u65d7\u7ad9) p850 sg6 I901 sg7 I25 ssI903 (dp851 g3 I0 sg4 V813(\u5730\u94c1\u8349\u623f\u7ad9-\u71d5\u90ca\u4e0a\u4e0a\u57ce\u4e94\u671f) p852 sg6 I903 sg7 I18 ssI905 (dp853 g3 I0 sg4 V\u591c32(\u5317\u5b98\u5385-\u4e1c\u6e56) p854 sg6 I905 sg7 I18 ssI907 (dp855 g3 I0 sg4 V867(\u4e1c\u76f4\u95e8\u5916-\u7ea2\u87ba\u5bfa) p856 sg6 I907 sg7 I18 ssI909 (dp857 g3 I0 sg4 V\u591c16(\u822a\u5929\u6865\u897f-\u6653\u6708\u82d1\u516c\u4ea4\u603b\u7ad9) p858 sg6 I909 sg7 I18 ssI911 (dp859 g3 I0 sg4 V\u591c23(\u5415\u8425\u82b1\u56ed-\u5317\u4eac\u897f\u7ad9) p860 sg6 I911 sg7 I18 ssI913 (dp861 g3 I0 sg4 V\u591c13(\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9-\u7518\u9732\u56ed) p862 sg6 I913 sg7 I18 ssI915 (dp863 g3 I0 sg4 V833(\u9001\u53d8\u7535\u516c\u53f8\u8def\u53e3\u897f-\u6cb3\u5317\u5e84) p864 sg6 I915 sg7 I18 ssI917 (dp865 g3 I0 sg4 V\u591c28(\u60e0\u65b0\u4e1c\u6865\u5357-\u5730\u94c1\u5b8b\u5bb6\u5e84\u7ad9) p866 sg6 I917 sg7 I18 ssI919 (dp867 g3 I0 sg4 V613(\u4e94\u8def-\u5efa\u6b23\u82d1) p868 sg6 I919 sg7 I18 ssI921 (dp869 g3 I0 sg4 V\u591c14(\u5317\u4eac\u897f\u7ad9-\u56fd\u5bb6\u4f53\u80b2\u9986\u516c\u4ea4\u573a\u7ad9) p870 sg6 I921 sg7 I18 ssI923 (dp871 g3 I0 sg4 V867(\u7ea2\u87ba\u5bfa-\u4e1c\u76f4\u95e8\u5916) p872 sg6 I923 sg7 I18 ssI925 (dp873 g3 I0 sg4 V943\u8def[\u8de8\u7701](\u9738\u5dde\u706b\u8f66\u7ad9-\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9) p874 sg6 I925 sg7 I19 ssI927 (dp875 g3 I0 sg4 V929[\u5343\u519b\u53f0](\u5730\u94c1\u82f9\u679c\u56ed\u897f-\u5343\u519b\u53f0) p876 sg6 I927 sg7 I21 ssI929 (dp877 g3 I0 sg4 V\u591c19(\u5317\u4eac\u7126\u5316\u5382-\u5317\u4eac\u7ad9\u4e1c) p878 sg6 I929 sg7 I18 ssI931 (dp879 g3 I0 sg4 V\u591c6(\u9752\u5e74\u8def\u5c0f\u533a-\u56fd\u5bb6\u4f53\u80b2\u9986) p880 sg6 I931 sg7 I18 ssI933 (dp881 g3 I0 sg4 V113(\u5927\u5317\u7a91-\u7941\u5bb6\u8c41\u5b50) p882 sg6 I933 sg7 I25 ssI935 (dp883 g3 I0 sg4 V\u591c18(\u5de6\u5bb6\u5e84-\u57ce\u5357\u5609\u56ed\u5317) p884 sg6 I935 sg7 I18 ssI937 (dp885 g3 I0 sg4 V\u591c8(\u5c0f\u9a6c\u5382-\u9890\u548c\u56ed) p886 sg6 I937 sg7 I18 ssI939 (dp887 g3 I0 sg4 V980(\u5bc6\u4e91\u6c7d\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p888 sg6 I939 sg7 I18 ssI941 (dp889 g3 I0 sg4 V\u591c24(\u548c\u5e73\u4e1c\u6865\u5357-\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a) p890 sg6 I941 sg7 I18 ssI943 (dp891 g3 I0 sg4 V896(\u826f\u4e61\u68a8\u56ed\u516c\u4ea4\u573a\u8f66\u7ad9-\u5218\u5bb6\u7a91\u6865\u897f) p892 sg6 I943 sg7 I21 ssI945 (dp893 g3 I0 sg4 V676(\u957f\u693f\u8857\u8def\u53e3\u897f-\u56e2\u6cb3\u5317\u6751) p894 sg6 I945 sg7 I18 ssI947 (dp895 g3 I0 sg4 V836\u533a\u95f4[\u5f20\u574a](\u5f20\u574a-\u5929\u6865\u6c7d\u8f66\u7ad9) p896 sg6 I947 sg7 I18 ssI949 (dp897 g3 I0 sg4 V812(\u71d5\u90ca\u51b6\u91d1\u4e00\u5c40-\u516b\u738b\u575f\u897f) p898 sg6 I949 sg7 I18 ssI951 (dp899 g3 I0 sg4 V\u591c25(\u5de6\u5b89\u8def-\u77f3\u5404\u5e84) p900 sg6 I951 sg7 I18 ssI953 (dp901 g3 I0 sg4 V\u591c26(\u57ce\u94c1\u5317\u82d1\u7ad9-\u548c\u5e73\u4e1c\u6865) p902 sg6 I953 sg7 I18 ssI955 (dp903 g3 I0 sg4 V\u591c23(\u5317\u4eac\u897f\u7ad9-\u5415\u8425\u82b1\u56ed) p904 sg6 I955 sg7 I18 ssI957 (dp905 g3 I0 sg4 V715(\u6653\u6708\u82d1\u516c\u4ea4\u603b\u7ad9-\u56db\u60e0\u6865) p906 sg6 I957 sg7 I18 ssI959 (dp907 g3 I0 sg4 V935(\u987a\u4e49\u534a\u58c1\u5e97\u8f66\u7ad9-\u4e1c\u76f4\u95e8\u5916) p908 sg6 I959 sg7 I18 ssI961 (dp909 g3 I1 sg7 I25 sg6 I961 ssI963 (dp910 g3 I0 sg4 V\u591c28(\u5730\u94c1\u5b8b\u5bb6\u5e84\u7ad9-\u60e0\u65b0\u4e1c\u6865\u897f) p911 sg6 I963 sg7 I18 ssI965 (dp912 g3 I0 sg4 V\u591c1(\u8001\u5c71\u516c\u4ea4\u573a\u7ad9-\u56db\u60e0\u67a2\u7ebd\u7ad9) p913 sg6 I965 sg7 I18 ssI967 (dp914 g3 I1 sg7 I28 sg6 I967 ssI969 (dp915 g3 I0 sg4 V\u591c7(\u97e9\u5e84\u5b50\u5317-\u5e73\u4e50\u56ed\u5317) p916 sg6 I969 sg7 I18 ssI971 (dp917 g3 I1 sg7 I40 sg6 I971 ssI973 (dp918 g3 I0 sg4 V\u591c3(\u9752\u5e74\u8def\u5c0f\u533a-\u5730\u94c1\u6d77\u6dc0\u4e94\u8def\u5c45\u7ad9) p919 sg6 I973 sg7 I18 ssI975 (dp920 g3 I1 sg7 I28 sg6 I975 ssI977 (dp921 g3 I0 sg4 V\u591c36(\u548c\u5e73\u4e1c\u6865\u5357-\u5bcc\u4e30\u6865\u897f) p922 sg6 I977 sg7 I18 ssI979 (dp923 g3 I0 sg4 V\u591c14(\u56fd\u5bb6\u4f53\u80b2\u9986\u516c\u4ea4\u573a\u7ad9-\u5317\u4eac\u897f\u7ad9) p924 sg6 I979 sg7 I18 ssI981 (dp925 g3 I0 sg4 V707(\u57ce\u5357\u5609\u56ed\u5317-\u987e\u5bb6\u5e84\u6865\u897f) p926 sg6 I981 sg7 I18 ssI983 (dp927 g3 I0 sg4 V\u591c22(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u897f\u7ea2\u95e8\u897f\u7ad9) p928 sg6 I983 sg7 I18 ssI985 (dp929 g3 I0 sg4 V\u591c5(\u5317\u4eac\u7ad9\u4e1c-\u7530\u987a\u5e84) p930 sg6 I985 sg7 I18 ssI987 (dp931 g3 I0 sg4 V825(\u5730\u94c1\u516c\u76ca\u897f\u6865\u7ad9-\u65e7\u5bab\u4e1c\u53e3) p932 sg6 I987 sg7 I21 ssI989 (dp933 g3 I0 sg4 V969(\u5730\u94c1\u897f\u5c40\u7ad9-\u6d77\u5b50\u89d2) p934 sg6 I989 sg7 I21 ssI991 (dp935 g3 I0 sg4 V969(\u6d77\u5b50\u89d2-\u5730\u94c1\u897f\u5c40\u7ad9) p936 sg6 I991 sg7 I21 ssI993 (dp937 g3 I0 sg4 V941(\u77f3\u9f99\u897f\u516c\u4ea4\u573a\u7ad9-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p938 sg6 I993 sg7 I21 ssI995 (dp939 g3 I0 sg4 V845(\u4e30\u76ca\u6865\u897f-\u7f8a\u574a\u6751) p940 sg6 I995 sg7 I21 ssI997 (dp941 g3 I0 sg4 V\u8fd0\u901a202(\u4ea6\u5e84\u6865\u5357-\u535a\u5174\u4e00\u8def\u5317\u53e3) p942 sg6 I997 sg7 I21 ssI999 (dp943 g3 I0 sg4 V847(\u9a6c\u7538\u6865\u897f-\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9) p944 sg6 I999 sg7 I21 ssI1001 (dp945 g3 I0 sg4 V845(\u7f8a\u574a\u6751-\u4e30\u76ca\u6865\u897f) p946 sg6 I1001 sg7 I21 ssI1003 (dp947 g3 I0 sg4 V993(\u7aa6\u5e97\u6c7d\u8f66\u7ad9-\u5730\u94c1\u897f\u7ea2\u95e8\u7ad9) p948 sg6 I1003 sg7 I21 ssI1005 (dp949 g3 I0 sg4 V941(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u77f3\u9f99\u897f\u516c\u4ea4\u573a\u7ad9) p950 sg6 I1005 sg7 I21 ssI1007 (dp951 g3 I0 sg4 V\u8fd0\u901a202(\u535a\u5174\u4e00\u8def\u5317\u53e3-\u4ea6\u5e84\u6865\u5357) p952 sg6 I1007 sg7 I21 ssI1009 (dp953 g3 I0 sg4 V993(\u5730\u94c1\u897f\u7ea2\u95e8\u7ad9-\u7aa6\u5e97\u6c7d\u8f66\u7ad9) p954 sg6 I1009 sg7 I21 ssI1011 (dp955 g3 I0 sg4 V847(\u5b59\u6cb3\u516c\u4ea4\u573a\u7ad9-\u9a6c\u7538\u6865\u897f) p956 sg6 I1011 sg7 I21 ssI1013 (dp957 g3 I0 sg4 V976(\u751c\u6c34\u56ed\u5317\u91cc-\u76db\u6797\u82d1\u516c\u4ea4\u573a\u7ad9) p958 sg6 I1013 sg7 I27 ssI1015 (dp959 g3 I0 sg4 V860(\u5730\u94c1\u5929\u901a\u82d1\u5317\u7ad9-\u66f9\u78be) p960 sg6 I1015 sg7 I27 ssI1017 (dp961 g3 I0 sg4 V663(\u82f9\u679c\u56ed\u5357-\u5c0f\u9a6c\u573a) p962 sg6 I1017 sg7 I27 ssI1019 (dp963 g3 I0 sg4 V828(\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9-\u53f0\u6e7e\u65b0\u57ce\u5357) p964 sg6 I1019 sg7 I27 ssI1021 (dp965 g3 I0 sg4 V344\u5feb(\u56de\u9f99\u89c2\u5c0f\u533a-\u5fb7\u80dc\u95e8\u897f) p966 sg6 I1021 sg7 I27 ssI1023 (dp967 g3 I0 sg4 V871(\u5317\u4eac\u5e02\u5546\u4e1a\u5b66\u6821-\u5317\u5927\u56fd\u9645\u533b\u9662) p968 sg6 I1023 sg7 I27 ssI1025 (dp969 g3 I0 sg4 V976(\u76db\u6797\u82d1\u516c\u4ea4\u573a\u7ad9-\u751c\u6c34\u56ed\u5317\u91cc) p970 sg6 I1025 sg7 I27 ssI1027 (dp971 g3 I0 sg4 V881(\u660c\u5e73\u4f55\u8425\u7ad9-\u5fb7\u80dc\u95e8\u897f) p972 sg6 I1027 sg7 I27 ssI1029 (dp973 g3 I0 sg4 V878(\u957f\u9675-\u57ce\u94c1\u56de\u9f99\u89c2\u7ad9) p974 sg6 I1029 sg7 I27 ssI1031 (dp975 g3 I0 sg4 V878(\u57ce\u94c1\u56de\u9f99\u89c2\u7ad9-\u957f\u9675) p976 sg6 I1031 sg7 I27 ssI1033 (dp977 g3 I0 sg4 V881(\u5fb7\u80dc\u95e8\u897f-\u660c\u5e73\u4f55\u8425\u7ad9) p978 sg6 I1033 sg7 I27 ssI1035 (dp979 g3 I0 sg4 V819(\u5730\u94c1\u8349\u623f\u7ad9-\u8bf8\u845b\u5e97) p980 sg6 I1035 sg7 I27 ssI1037 (dp981 g3 I0 sg4 V333\u5185\u73af(\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3-\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3) p982 sg6 I1037 sg7 I27 ssI1039 (dp983 g3 I0 sg4 V879(\u957f\u9675-\u516b\u8fbe\u5cad) p984 sg6 I1039 sg7 I27 ssI1041 (dp985 g3 I0 sg4 V871(\u5317\u5927\u56fd\u9645\u533b\u9662-\u5317\u4eac\u5e02\u5546\u4e1a\u5b66\u6821) p986 sg6 I1041 sg7 I27 ssI1043 (dp987 g3 I0 sg4 V828(\u53f0\u6e7e\u65b0\u57ce\u5357-\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9) p988 sg6 I1043 sg7 I27 ssI1045 (dp989 g3 I0 sg4 V333\u5916\u73af(\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3-\u5b89\u5b81\u5e84\u4e1c\u8def\u5357\u53e3) p990 sg6 I1045 sg7 I27 ssI1047 (dp991 g3 I0 sg4 V663(\u5c0f\u9a6c\u573a-\u82f9\u679c\u56ed\u5357) p992 sg6 I1047 sg7 I27 ssI1049 (dp993 g3 I0 sg4 V889(\u660c\u5e73\u4f55\u8425\u7ad9-\u5fb7\u80dc\u95e8\u897f) p994 sg6 I1049 sg7 I27 ssI1051 (dp995 g3 I0 sg4 V889(\u5fb7\u80dc\u95e8\u897f-\u660c\u5e73\u4f55\u8425\u7ad9) p996 sg6 I1051 sg7 I27 ssI1053 (dp997 g3 I0 sg4 V879(\u516b\u8fbe\u5cad-\u957f\u9675) p998 sg6 I1053 sg7 I27 ssI1055 (dp999 g3 I0 sg4 V819(\u8bf8\u845b\u5e97-\u5730\u94c1\u8349\u623f\u7ad9) p1000 sg6 I1055 sg7 I27 ssI1057 (dp1001 g3 I0 sg4 V344\u5feb(\u5fb7\u80dc\u95e8\u897f-\u56de\u9f99\u89c2\u5c0f\u533a) p1002 sg6 I1057 sg7 I27 ssI1059 (dp1003 g3 I0 sg4 V860(\u66f9\u78be-\u5730\u94c1\u5929\u901a\u82d1\u5317\u7ad9) p1004 sg6 I1059 sg7 I27 ssI1061 (dp1005 g3 I0 sg4 V52(\u5317\u4eac\u897f\u7ad9-\u5e73\u4e50\u56ed) p1006 sg6 I1061 sg7 I30 ssI1063 (dp1007 g3 I0 sg4 V337(\u524d\u95e8\u897f-\u77f3\u666f\u5c71) p1008 sg6 I1063 sg7 I30 ssI1065 (dp1009 g3 I0 sg4 V354(\u5bcc\u4e30\u6865\u897f-\u4eac\u539f\u8def\u53e3\u4e1c) p1010 sg6 I1065 sg7 I30 ssI1067 (dp1011 g3 I0 sg4 V325(\u8859\u95e8\u53e3-\u9ad8\u4e95\u8def\u53e3\u5357) p1012 sg6 I1067 sg7 I30 ssI1069 (dp1013 g3 I0 sg4 V598(\u897f\u9053\u53e3\u516c\u4ea4\u573a\u7ad9-\u516b\u5927\u5904) p1014 sg6 I1069 sg7 I30 ssI1071 (dp1015 g3 I0 sg4 V63(\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9-\u4e3d\u6cfd\u6865) p1016 sg6 I1071 sg7 I30 ssI1073 (dp1017 g3 I0 sg4 V373(\u4eac\u539f\u8def\u53e3\u4e1c-\u5317\u4eac\u897f\u7ad9) p1018 sg6 I1073 sg7 I30 ssI1075 (dp1019 g3 I0 sg4 V354(\u4eac\u539f\u8def\u53e3\u4e1c-\u5bcc\u4e30\u6865\u897f) p1020 sg6 I1075 sg7 I30 ssI1077 (dp1021 g3 I0 sg4 V624(\u822a\u5929\u6865\u5357-\u69d0\u6811\u5cad\u516c\u4ea4\u573a\u7ad9) p1022 sg6 I1077 sg7 I30 ssI1079 (dp1023 g3 I0 sg4 V\u4e1311(\u7fe0\u8c37\u7389\u666f\u82d1\u5c0f\u533a-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1024 sg6 I1079 sg7 I30 ssI1081 (dp1025 g3 I0 sg4 V527(\u96cd\u738b\u5e9c-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1026 sg6 I1081 sg7 I30 ssI1083 (dp1027 g3 I0 sg4 V\u727918(\u5317\u4eac\u897f\u7ad9-\u897f\u82d1\u67a2\u7ebd\u7ad9) p1028 sg6 I1083 sg7 I30 ssI1085 (dp1029 g3 I0 sg4 V325(\u9ad8\u4e95\u8def\u53e3\u5357-\u8859\u95e8\u53e3) p1030 sg6 I1085 sg7 I30 ssI1087 (dp1031 g3 I0 sg4 V323(\u4e03\u91cc\u5e84\u897f\u884c-\u77e5\u6625\u91cc) p1032 sg6 I1087 sg7 I30 ssI1089 (dp1033 g3 I0 sg4 V545(\u8001\u5c71\u897f\u8857-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1034 sg6 I1089 sg7 I30 ssI1091 (dp1035 g3 I0 sg4 V\u4e1327(\u8fbe\u5b98\u8425-\u4e3d\u6cfd\u6865) p1036 sg6 I1091 sg7 I30 ssI1093 (dp1037 g3 I0 sg4 V389(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u516b\u5927\u5904) p1038 sg6 I1093 sg7 I30 ssI1095 (dp1039 g3 I0 sg4 V692(\u4e16\u754c\u516c\u56ed\u516c\u4ea4\u573a\u7ad9-\u6c38\u5b9a\u95e8\u5185) p1040 sg6 I1095 sg7 I30 ssI1097 (dp1041 g3 I0 sg4 V32(\u516c\u4e3b\u575f\u897f-\u56fd\u5bb6\u5de5\u5546\u603b\u5c40) p1042 sg6 I1097 sg7 I30 ssI1099 (dp1043 g3 I0 sg4 V78(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u5e7f\u5b89\u95e8) p1044 sg6 I1099 sg7 I30 ssI1101 (dp1045 g3 I0 sg4 V338(\u7389\u6cc9\u8def\u53e3\u5357-\u4e30\u53f0\u4f53\u80b2\u4e2d\u5fc3) p1046 sg6 I1101 sg7 I30 ssI1103 (dp1047 g3 I0 sg4 V531(\u4e3d\u6cfd\u6865-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1048 sg6 I1103 sg7 I30 ssI1105 (dp1049 g3 I0 sg4 V546(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u5bcc\u4e30\u6865\u897f) p1050 sg6 I1105 sg7 I30 ssI1107 (dp1051 g3 I0 sg4 V480(\u4e1c\u65b9\u65f6\u5c1a\u9a7e\u6821\u5317\u95e8-\u4e3d\u6cfd\u6865) p1052 sg6 I1107 sg7 I30 ssI1109 (dp1053 g3 I0 sg4 V310(\u4e30\u53f0\u533a\u8f9b\u5e84-\u4e30\u53f0\u8def\u53e3) p1054 sg6 I1109 sg7 I30 ssI1111 (dp1055 g3 I0 sg4 V611(\u4fdd\u798f\u5bfa\u6865\u897f-\u5f20\u4eea\u6751\u5357\u7ad9) p1056 sg6 I1111 sg7 I30 ssI1113 (dp1057 g3 I0 sg4 V\u4e133(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p1058 sg6 I1113 sg7 I30 ssI1115 (dp1059 g3 I0 sg4 V79(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u77e5\u6625\u8def) p1060 sg6 I1115 sg7 I30 ssI1117 (dp1061 g3 I0 sg4 V477(\u4e16\u754c\u516c\u56ed\u516c\u4ea4\u573a\u7ad9-\u8f9f\u624d\u80e1\u540c\u897f\u53e3) p1062 sg6 I1117 sg7 I30 ssI1119 (dp1063 g3 I0 sg4 V10(\u5357\u83dc\u56ed-\u822a\u5929\u6865\u4e1c) p1064 sg6 I1119 sg7 I34 ssI1121 (dp1065 g3 I0 sg4 V94(\u5854\u9662\u5c0f\u533a\u5357\u95e8-\u516c\u4e3b\u575f\u4e1c) p1066 sg6 I1121 sg7 I30 ssI1123 (dp1067 g3 I0 sg4 V477(\u8f9f\u624d\u80e1\u540c\u897f\u53e3-\u4e16\u754c\u516c\u56ed\u516c\u4ea4\u573a\u7ad9) p1068 sg6 I1123 sg7 I30 ssI1125 (dp1069 g3 I0 sg4 V338(\u4e30\u53f0\u4f53\u80b2\u4e2d\u5fc3-\u7389\u6cc9\u8def\u53e3\u5357) p1070 sg6 I1125 sg7 I30 ssI1127 (dp1071 g3 I0 sg4 V64(\u516c\u4e3b\u575f\u897f-\u9752\u5854\u5c0f\u533a) p1072 sg6 I1127 sg7 I30 ssI1129 (dp1073 g3 I0 sg4 V374(\u5317\u4eac\u897f\u7ad9-\u9890\u548c\u56ed\u65b0\u5efa\u5bab\u95e8) p1074 sg6 I1129 sg7 I30 ssI1131 (dp1075 g3 I0 sg4 V83(\u6021\u6d77\u82b1\u56ed\u897f\u95e8-\u897f\u5355\u8def\u53e3\u4e1c) p1076 sg6 I1131 sg7 I30 ssI1133 (dp1077 g3 I0 sg4 V20(\u5317\u4eac\u5357\u7ad9-\u5317\u4eac\u7ad9\u4e1c) p1078 sg6 I1133 sg7 I30 ssI1135 (dp1079 g3 I0 sg4 V321(\u516d\u91cc\u6865\u4e1c-\u5357\u5bab\u5357\u7ad9) p1080 sg6 I1135 sg7 I30 ssI1137 (dp1081 g3 I0 sg4 V531(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u4e3d\u6cfd\u6865) p1082 sg6 I1137 sg7 I30 ssI1139 (dp1083 g3 I0 sg4 V546(\u5bcc\u4e30\u6865\u897f-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1084 sg6 I1139 sg7 I30 ssI1141 (dp1085 g3 I0 sg4 V313(\u4e30\u53f0\u4f53\u80b2\u4e2d\u5fc3-\u5927\u738b\u5e99) p1086 sg6 I1141 sg7 I30 ssI1143 (dp1087 g3 I0 sg4 V661(\u5317\u4eac\u897f\u7ad9-\u592a\u5b50\u5cea\u9675\u56ed) p1088 sg6 I1143 sg7 I30 ssI1145 (dp1089 g3 I0 sg4 V63(\u4e3d\u6cfd\u6865-\u6c38\u5b9a\u95e8\u957f\u9014\u6c7d\u8f66\u7ad9) p1090 sg6 I1145 sg7 I30 ssI1147 (dp1091 g3 I0 sg4 V64(\u9752\u5854\u5c0f\u533a-\u516c\u4e3b\u575f\u897f) p1092 sg6 I1147 sg7 I30 ssI1149 (dp1093 g3 I0 sg4 V\u727917(\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p1094 sg6 I1149 sg7 I30 ssI1151 (dp1095 g3 I0 sg4 V323(\u77e5\u6625\u91cc-\u4e03\u91cc\u5e84) p1096 sg6 I1151 sg7 I30 ssI1153 (dp1097 g3 I0 sg4 V76(\u5e7f\u5b89\u95e8-\u5f20\u4eea\u6751\u516c\u4ea4\u573a\u7ad9) p1098 sg6 I1153 sg7 I30 ssI1155 (dp1099 g3 I0 sg4 V634(\u4fdd\u798f\u5bfa\u6865\u897f-\u90ed\u5e84\u5b50\u516c\u4ea4\u573a\u7ad9) p1100 sg6 I1155 sg7 I30 ssI1157 (dp1101 g3 I0 sg4 V309(\u4e8c\u4e03\u5382-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p1102 sg6 I1157 sg7 I30 ssI1159 (dp1103 g3 I0 sg4 V598(\u516b\u5927\u5904-\u897f\u9053\u53e3\u516c\u4ea4\u573a\u7ad9) p1104 sg6 I1159 sg7 I30 ssI1161 (dp1105 g3 I0 sg4 V527(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u96cd\u738b\u5e9c) p1106 sg6 I1161 sg7 I30 ssI1163 (dp1107 g3 I0 sg4 V\u727918(\u897f\u82d1\u67a2\u7ebd\u7ad9-\u5317\u4eac\u897f\u7ad9) p1108 sg6 I1163 sg7 I30 ssI1165 (dp1109 g3 I0 sg4 V86(\u822a\u5929\u6865\u5317-\u56fd\u5bb6\u4f53\u80b2\u9986) p1110 sg6 I1165 sg7 I30 ssI1167 (dp1111 g3 I0 sg4 V611(\u5f20\u4eea\u6751\u5357\u7ad9-\u4fdd\u798f\u5bfa\u6865\u897f) p1112 sg6 I1167 sg7 I30 ssI1169 (dp1113 g3 I0 sg4 V99(\u5de6\u5b89\u8def-\u975b\u5382\u65b0\u6751) p1114 sg6 I1169 sg7 I34 ssI1171 (dp1115 g3 I0 sg4 V68(\u9a6c\u5b98\u8425\u897f-\u5382\u6865\u8def\u53e3\u897f) p1116 sg6 I1171 sg7 I30 ssI1173 (dp1117 g3 I0 sg4 V52(\u5e73\u4e50\u56ed-\u5317\u4eac\u897f\u7ad9) p1118 sg6 I1173 sg7 I30 ssI1175 (dp1119 g3 I0 sg4 V334(\u52a8\u7269\u56ed\u67a2\u7ebd\u7ad9-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1120 sg6 I1175 sg7 I30 ssI1177 (dp1121 g3 I0 sg4 V373(\u5317\u4eac\u897f\u7ad9-\u9c81\u8c37\u8def\u8859\u95e8\u53e3) p1122 sg6 I1177 sg7 I30 ssI1179 (dp1123 g3 I0 sg4 V68(\u5382\u6865\u8def\u53e3\u5357-\u9a6c\u5b98\u8425\u897f) p1124 sg6 I1179 sg7 I30 ssI1181 (dp1125 g3 I0 sg4 V\u4e1346(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u4eac\u539f\u8def\u53e3\u4e1c) p1126 sg6 I1181 sg7 I30 ssI1183 (dp1127 g3 I0 sg4 V634(\u90ed\u5e84\u5b50\u516c\u4ea4\u573a\u7ad9-\u4fdd\u798f\u5bfa\u6865\u897f) p1128 sg6 I1183 sg7 I30 ssI1185 (dp1129 g3 I0 sg4 V10(\u822a\u5929\u6865\u4e1c-\u5357\u83dc\u56ed) p1130 sg6 I1185 sg7 I34 ssI1187 (dp1131 g3 I0 sg4 V79(\u77e5\u6625\u8def-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1132 sg6 I1187 sg7 I30 ssI1189 (dp1133 g3 I0 sg4 V334(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u52a8\u7269\u56ed\u67a2\u7ebd\u7ad9) p1134 sg6 I1189 sg7 I30 ssI1191 (dp1135 g3 I0 sg4 V\u4e1369(\u5730\u94c1\u516b\u5b9d\u5c71\u7ad9-\u8859\u95e8\u53e3) p1136 sg6 I1191 sg7 I30 ssI1193 (dp1137 g3 I0 sg4 V\u4e1327(\u4e3d\u6cfd\u6865-\u8fbe\u5b98\u8425) p1138 sg6 I1193 sg7 I30 ssI1195 (dp1139 g3 I0 sg4 V661(\u592a\u5b50\u5cea\u9675\u56ed-\u5317\u4eac\u897f\u7ad9) p1140 sg6 I1195 sg7 I30 ssI1197 (dp1141 g3 I0 sg4 V\u727917(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5317\u4eac\u5357\u7ad9\u5357\u5e7f\u573a) p1142 sg6 I1197 sg7 I30 ssI1199 (dp1143 g3 I0 sg4 V612(\u5f20\u4eea\u6751\u5357\u7ad9-\u5317\u5b98\u5385) p1144 sg6 I1199 sg7 I30 ssI1201 (dp1145 g3 I0 sg4 V308(\u9c81\u8c37\u8def\u8859\u95e8\u53e3-\u767d\u4e91\u8def) p1146 sg6 I1201 sg7 I30 ssI1203 (dp1147 g3 I0 sg4 V50(\u9a6c\u5b98\u8425\u897f-\u8f66\u516c\u5e84\u5317) p1148 sg6 I1203 sg7 I30 ssI1205 (dp1149 g3 I0 sg4 V480(\u4e3d\u6cfd\u6865-\u4e1c\u65b9\u65f6\u5c1a\u9a7e\u6821\u5317\u95e8) p1150 sg6 I1205 sg7 I30 ssI1207 (dp1151 g3 I0 sg4 V451(\u516c\u4e3b\u575f\u897f-\u5bcc\u4e30\u6865\u897f) p1152 sg6 I1207 sg7 I30 ssI1209 (dp1153 g3 I0 sg4 V20(\u5317\u4eac\u7ad9\u4e1c-\u5317\u4eac\u5357\u7ad9) p1154 sg6 I1209 sg7 I29 ssI1211 (dp1155 g3 I0 sg4 V\u4e1369(\u8859\u95e8\u53e3-\u5730\u94c1\u516b\u5b9d\u5c71\u7ad9) p1156 sg6 I1211 sg7 I30 ssI1213 (dp1157 g3 I0 sg4 V337(\u77f3\u666f\u5c71-\u957f\u693f\u8857\u8def\u53e3\u4e1c) p1158 sg6 I1213 sg7 I30 ssI1215 (dp1159 g3 I0 sg4 V436(\u4eac\u539f\u8def\u53e3\u4e1c-\u7389\u6e0a\u6f6d\u5357\u8def\u897f\u53e3) p1160 sg6 I1215 sg7 I30 ssI1217 (dp1161 g3 I0 sg4 V\u4e1346(\u4eac\u539f\u8def\u53e3\u4e1c-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1162 sg6 I1217 sg7 I30 ssI1219 (dp1163 g3 I0 sg4 V574(\u4e30\u53f0\u533a\u8f9b\u5e84-\u9c81\u8c37\u8def\u8859\u95e8\u53e3) p1164 sg6 I1219 sg7 I30 ssI1221 (dp1165 g3 I0 sg4 V481(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u5df4\u6c9f\u6751) p1166 sg6 I1221 sg7 I30 ssI1223 (dp1167 g3 I0 sg4 V99(\u975b\u5382\u65b0\u6751-\u5de6\u5b89\u8def) p1168 sg6 I1223 sg7 I34 ssI1225 (dp1169 g3 I0 sg4 V554(\u90ed\u5e84\u5b50\u516c\u4ea4\u573a\u7ad9-\u516d\u91cc\u6865\u5317\u91cc) p1170 sg6 I1225 sg7 I30 ssI1227 (dp1171 g3 I0 sg4 V310(\u4e30\u53f0\u4f53\u80b2\u4e2d\u5fc3-\u4e30\u53f0\u533a\u8f9b\u5e84) p1172 sg6 I1227 sg7 I30 ssI1229 (dp1173 g3 I0 sg4 V554(\u516d\u91cc\u6865\u5317\u91cc-\u90ed\u5e84\u5b50\u516c\u4ea4\u573a\u7ad9) p1174 sg6 I1229 sg7 I30 ssI1231 (dp1175 g3 I0 sg4 V374(\u9890\u548c\u56ed\u65b0\u5efa\u5bab\u95e8-\u5317\u4eac\u897f\u7ad9) p1176 sg6 I1231 sg7 I30 ssI1233 (dp1177 g3 I0 sg4 V313(\u5927\u738b\u5e99-\u4e30\u53f0\u8def\u53e3) p1178 sg6 I1233 sg7 I30 ssI1235 (dp1179 g3 I0 sg4 V612(\u5317\u5b98\u5385-\u5f20\u4eea\u6751\u5357\u7ad9) p1180 sg6 I1235 sg7 I30 ssI1237 (dp1181 g3 I0 sg4 V351(\u5927\u89c2\u56ed\u897f-\u4e30\u53f0\u8def\u53e3) p1182 sg6 I1237 sg7 I30 ssI1239 (dp1183 g3 I0 sg4 V692(\u5148\u519c\u575b-\u4e16\u754c\u516c\u56ed\u516c\u4ea4\u573a\u7ad9) p1184 sg6 I1239 sg7 I30 ssI1241 (dp1185 g3 I0 sg4 V76(\u5f20\u4eea\u6751\u516c\u4ea4\u573a\u7ad9-\u5e7f\u5b89\u95e8) p1186 sg6 I1241 sg7 I30 ssI1243 (dp1187 g3 I0 sg4 V568(\u7530\u6751\u4e1c\u8def\u5357\u53e3-\u9a6c\u5b98\u8425) p1188 sg6 I1243 sg7 I30 ssI1245 (dp1189 g3 I0 sg4 V308(\u767d\u4e91\u8def-\u8859\u95e8\u53e3) p1190 sg6 I1245 sg7 I30 ssI1247 (dp1191 g3 I0 sg4 V321(\u5357\u5bab\u5357\u7ad9-\u516d\u91cc\u6865\u4e1c) p1192 sg6 I1247 sg7 I30 ssI1249 (dp1193 g3 I0 sg4 V86(\u56fd\u5bb6\u4f53\u80b2\u9986-\u822a\u5929\u6865\u5317) p1194 sg6 I1249 sg7 I30 ssI1251 (dp1195 g3 I0 sg4 V437(\u516c\u4e3b\u575f\u5317-\u9890\u548c\u56ed\u65b0\u5efa\u5bab\u95e8) p1196 sg6 I1251 sg7 I30 ssI1253 (dp1197 g3 I0 sg4 V94(\u516c\u4e3b\u575f\u4e1c-\u5854\u9662\u5c0f\u533a\u5357\u95e8) p1198 sg6 I1253 sg7 I30 ssI1255 (dp1199 g3 I0 sg4 V624(\u69d0\u6811\u5cad\u516c\u4ea4\u573a\u7ad9-\u822a\u5929\u6865\u5357) p1200 sg6 I1255 sg7 I30 ssI1257 (dp1201 g3 I0 sg4 V574(\u4eac\u539f\u8def\u53e3\u4e1c-\u4e30\u53f0\u533a\u8f9b\u5e84) p1202 sg6 I1257 sg7 I30 ssI1259 (dp1203 g3 I0 sg4 V57(\u975b\u5382\u65b0\u6751-\u56db\u60e0\u67a2\u7ebd\u7ad9) p1204 sg6 I1259 sg7 I30 ssI1261 (dp1205 g3 I0 sg4 V351(\u4e30\u53f0\u4f53\u80b2\u4e2d\u5fc3-\u83dc\u6237\u8425\u6865\u4e1c) p1206 sg6 I1261 sg7 I30 ssI1263 (dp1207 g3 I0 sg4 V78(\u5e7f\u5b89\u95e8\u5185-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1208 sg6 I1263 sg7 I30 ssI1265 (dp1209 g3 I0 sg4 V437(\u9890\u548c\u56ed\u65b0\u5efa\u5bab\u95e8-\u516c\u4e3b\u575f\u5317) p1210 sg6 I1265 sg7 I30 ssI1267 (dp1211 g3 I0 sg4 V568(\u9a6c\u5b98\u8425\u5357-\u7530\u6751\u4e1c\u8def\u5357\u53e3) p1212 sg6 I1267 sg7 I30 ssI1269 (dp1213 g3 I0 sg4 V309(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u4e8c\u4e03\u5382) p1214 sg6 I1269 sg7 I30 ssI1271 (dp1215 g3 I0 sg4 V451(\u5bcc\u4e30\u6865\u897f-\u516c\u4e3b\u575f\u897f) p1216 sg6 I1271 sg7 I30 ssI1273 (dp1217 g3 I0 sg4 V32(\u56fd\u5bb6\u5de5\u5546\u603b\u5c40-\u516c\u4e3b\u575f\u897f) p1218 sg6 I1273 sg7 I30 ssI1275 (dp1219 g3 I0 sg4 V57(\u56db\u60e0\u67a2\u7ebd\u7ad9-\u975b\u5382\u65b0\u6751) p1220 sg6 I1275 sg7 I30 ssI1277 (dp1221 g3 I0 sg4 V545(\u5434\u5e84\u516c\u4ea4\u573a\u7ad9-\u8001\u5c71\u897f\u8857) p1222 sg6 I1277 sg7 I30 ssI1279 (dp1223 g3 I0 sg4 V83(\u897f\u5355\u8def\u53e3\u4e1c-\u6021\u6d77\u82b1\u56ed\u897f\u95e8) p1224 sg6 I1279 sg7 I30 ssI1281 (dp1225 g3 I0 sg4 V597(\u9ed1\u77f3\u5934\u6751-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1226 sg6 I1281 sg7 I30 ssI1283 (dp1227 g3 I0 sg4 V597(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u9ed1\u77f3\u5934\u6751) p1228 sg6 I1283 sg7 I30 ssI1285 (dp1229 g3 I0 sg4 V\u4e1311(\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9-\u7fe0\u8c37\u7389\u666f\u82d1\u5c0f\u533a) p1230 sg6 I1285 sg7 I30 ssI1287 (dp1231 g3 I0 sg4 V50(\u8f66\u516c\u5e84\u5317-\u9a6c\u5b98\u8425\u897f) p1232 sg6 I1287 sg7 I29 ssI1289 (dp1233 g3 I0 sg4 V481(\u5df4\u6c9f\u6751-\u5434\u5e84\u516c\u4ea4\u573a\u7ad9) p1234 sg6 I1289 sg7 I30 ssI1291 (dp1235 g3 I0 sg4 V436(\u7389\u6e0a\u6f6d\u5357\u8def\u897f\u53e3-\u9c81\u8c37\u8def\u8859\u95e8\u53e3) p1236 sg6 I1291 sg7 I30 ssI1293 (dp1237 g3 I0 sg4 V389(\u516b\u5927\u5904-\u9c81\u8c37\u516c\u4ea4\u573a\u7ad9) p1238 sg6 I1293 sg7 I30 ssI1295 (dp1239 g3 I0 sg4 V601(\u7941\u5bb6\u575f-\u5730\u94c1\u5317\u5bab\u95e8\u7ad9) p1240 sg6 I1295 sg7 I35 ssI1297 (dp1241 g3 I0 sg4 V\u4e1331(\u767e\u5609\u57ce\u5c0f\u533a\u4e1c\u95e8-\u5730\u94c1\u9f99\u6cfd\u7ad9) p1242 sg6 I1297 sg7 I35 ssI1299 (dp1243 g3 I0 sg4 V\u4e1331(\u5730\u94c1\u9f99\u6cfd\u7ad9-\u767e\u5609\u57ce\u5c0f\u533a\u4e1c\u95e8) p1244 sg6 I1299 sg7 I35 ssI1301 (dp1245 g3 I0 sg4 V621(\u534a\u622a\u5854\u6751-\u8001\u541b\u5802) p1246 sg6 I1301 sg7 I39 ssI1303 (dp1247 g3 I0 sg4 V519(\u4e8c\u516d\u4e00\u533b\u9662-\u5730\u94c1\u9f99\u6cfd\u7ad9) p1248 sg6 I1303 sg7 I35 ssI1305 (dp1249 g3 I0 sg4 V650(\u7126\u5e84\u6865\u5317-\u5b8b\u5bb6\u5e84\u67a2\u7ebd\u7ad9) p1250 sg6 I1305 sg7 I35 ssI1307 (dp1251 g3 I0 sg4 V102\u7535\u8f66(\u5317\u4eac\u5357\u7ad9-\u52a8\u7269\u56ed\u67a2\u7ebd\u7ad9) p1252 sg6 I1307 sg7 I35 ssI1309 (dp1253 g3 I0 sg4 V621(\u8001\u541b\u5802-\u534a\u622a\u5854\u6751) p1254 sg6 I1309 sg7 I39 ssI1311 (dp1255 g3 I0 sg4 V616(\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a-\u5317\u6f5e\u56ed) p1256 sg6 I1311 sg7 I35 ssI1313 (dp1257 g3 I0 sg4 V5(\u5317\u571f\u57ce\u516c\u4ea4\u573a\u7ad9-\u83dc\u6237\u8425\u6865) p1258 sg6 I1313 sg7 I35 ssI1315 (dp1259 g3 I0 sg4 V102\u7535\u8f66(\u52a8\u7269\u56ed\u67a2\u7ebd\u7ad9-\u5317\u4eac\u5357\u7ad9) p1260 sg6 I1315 sg7 I35 ssI1317 (dp1261 g3 I0 sg4 V616(\u5317\u6f5e\u56ed-\u5317\u4eac\u897f\u7ad9\u5357\u5e7f\u573a) p1262 sg6 I1317 sg7 I35 ssI1319 (dp1263 g3 I0 sg4 V541(\u52b2\u677e-\u9ad8\u7891\u5e97\u4e1c) p1264 sg6 I1319 sg7 I35 ssI1321 (dp1265 g3 I0 sg4 V519(\u5730\u94c1\u9f99\u6cfd\u7ad9-\u4e8c\u516d\u4e00\u533b\u9662) p1266 sg6 I1321 sg7 I35 ssI1323 (dp1267 g3 I0 sg4 V650(\u5b8b\u5bb6\u5e84\u67a2\u7ebd\u7ad9-\u7126\u5e84\u6865\u5317) p1268 sg6 I1323 sg7 I35 ssI1325 (dp1269 g3 I0 sg4 V541(\u9ad8\u7891\u5e97\u4e1c-\u52b2\u677e) p1270 sg6 I1325 sg7 I35 ssI1327 (dp1271 g3 I0 sg4 V5(\u83dc\u6237\u8425\u6865-\u5317\u571f\u57ce\u516c\u4ea4\u573a\u7ad9) p1272 sg6 I1327 sg7 I35 ssI1329 (dp1273 g3 I0 sg4 V601(\u5730\u94c1\u5317\u5bab\u95e8\u7ad9-\u7941\u5bb6\u575f) p1274 sg6 I1329 sg7 I35 ssI1331 (dp1275 g3 I0 sg4 V701(\u5cb3\u5404\u5e84\u897f\u7ad9-\u5927\u897f\u6d0b\u65b0\u57ce\u5357\u95e8) p1276 sg6 I1331 sg7 I37 ssI1333 (dp1277 g3 I0 sg4 V305(\u5b9d\u76db\u91cc\u5c0f\u533a-\u5fb7\u80dc\u95e8) p1278 sg6 I1333 sg7 I37 ssI1335 (dp1279 g3 I0 sg4 V614(\u5927\u949f\u5bfa-\u5355\u6751) p1280 sg6 I1335 sg7 I37 ssI1337 (dp1281 g3 I0 sg4 V620(\u65b0\u8857\u53e3\u8c41\u53e3-\u5929\u901a\u5317\u82d1) p1282 sg6 I1337 sg7 I37 ssI1339 (dp1283 g3 I0 sg4 V409(\u6765\u5e7f\u8425\u897f\u6865\u4e1c-\u961c\u6210\u95e8\u5185) p1284 sg6 I1339 sg7 I37 ssI1341 (dp1285 g3 I0 sg4 V625(\u4e8c\u62e8\u5b50\u65b0\u6751-\u9f13\u697c\u6865\u897f) p1286 sg6 I1341 sg7 I37 ssI1343 (dp1287 g3 I0 sg4 V714(\u9999\u5c71-\u961c\u6210\u95e8\u5185) p1288 sg6 I1343 sg7 I37 ssI1345 (dp1289 g3 I0 sg4 V21(\u5317\u4eac\u897f\u7ad9-\u5b89\u534e\u6865\u5317) p1290 sg6 I1345 sg7 I37 ssI1347 (dp1291 g3 I0 sg4 V409(\u961c\u6210\u95e8\u5185-\u6765\u5e7f\u8425\u897f\u6865\u4e1c) p1292 sg6 I1347 sg7 I37 ssI1349 (dp1293 g3 I0 sg4 V66(\u524d\u95e8-\u57ce\u5357\u5609\u56ed\u5317) p1294 sg6 I1349 sg7 I37 ssI1351 (dp1295 g3 I0 sg4 V25(\u57ce\u5916\u8bda-\u5317\u4eac\u7ad9\u4e1c) p1296 sg6 I1351 sg7 I37 ssI1353 (dp1297 g3 I0 sg4 V\u4e13117(\u5929\u901a\u897f\u82d1\u5357-\u71d5\u4e39) p1298 sg6 I1353 sg7 I37 ssI1355 (dp1299 g3 I0 sg4 V701(\u5927\u897f\u6d0b\u65b0\u57ce\u5357\u95e8-\u5cb3\u5404\u5e84\u897f\u7ad9) p1300 sg6 I1355 sg7 I37 ssI1357 (dp1301 g3 I0 sg4 V25(\u5317\u4eac\u7ad9\u4e1c-\u57ce\u5916\u8bda) p1302 sg6 I1357 sg7 I37 ssI1359 (dp1303 g3 I0 sg4 V\u4e13119(\u5730\u94c1\u5929\u901a\u82d1\u5317\u7ad9-\u6d77\u9d84\u843d) p1304 sg6 I1359 sg7 I37 ssI1361 (dp1305 g3 I0 sg4 V484(\u5317\u533b\u4e09\u9662-\u5730\u94c1\u5317\u82d1\u7ad9) p1306 sg6 I1361 sg7 I37 ssI1363 (dp1307 g3 I0 sg4 V\u4e13163(\u5927\u7ea2\u95e8\u9526\u82d1\u5c0f\u533a-\u5927\u7ea2\u95e8\u6865) p1308 sg6 I1363 sg7 I37 ssI1365 (dp1309 g3 I0 sg4 V558(\u7acb\u6c34\u6865-\u970d\u8425\u516c\u4ea4\u573a\u7ad9) p1310 sg6 I1365 sg7 I37 ssI1367 (dp1311 g3 I0 sg4 V614(\u5355\u6751-\u5927\u949f\u5bfa) p1312 sg6 I1367 sg7 I37 ssI1369 (dp1313 g3 I0 sg4 V408(\u77f3\u4f5b\u8425\u897f\u91cc-\u6167\u5fe0\u91cc) p1314 sg6 I1369 sg7 I37 ssI1371 (dp1315 g3 I0 sg4 V439(\u767e\u5b50\u6e7e-\u5341\u91cc\u6cb3\u6865\u4e1c) p1316 sg6 I1371 sg7 I37 ssI1373 (dp1317 g3 I0 sg4 V471(\u5730\u94c1\u671b\u4eac\u897f\u7ad9-\u671b\u4eac\u82b1\u56ed\u897f\u533a\u5317\u95e8) p1318 sg6 I1373 sg7 I37 ssI1375 (dp1319 g3 I0 sg4 V\u4e13163(\u5927\u7ea2\u95e8\u6865-\u5927\u7ea2\u95e8\u9526\u82d1\u5c0f\u533a) p1320 sg6 I1375 sg7 I37 ssI1377 (dp1321 g3 I0 sg4 V\u4e1359(\u7fe0\u6d77\u660e\u82d1-\u5fb7\u946b\u5609\u56ed) p1322 sg6 I1377 sg7 I37 ssI1379 (dp1323 g3 I0 sg4 V404(\u6765\u5e7f\u8425\u897f\u6865\u4e1c-\u4e1c\u76f4\u95e8\u67a2\u7ebd\u7ad9) p1324 sg6 I1379 sg7 I37 ssI1381 (dp1325 g3 I0 sg4 V319(\u5927\u5c6f\u4e1c-\u5929\u901a\u5317\u82d1) p1326 sg6 I1381 sg7 I37 ssI1383 (dp1327 g3 I0 sg4 V\u4e1381(\u5317\u82d1\u516c\u4ea4\u573a\u7ad9-\u5730\u94c1\u7acb\u6c34\u6865\u5357\u7ad9) p1328 sg6 I1383 sg7 I37 ssI1385 (dp1329 g3 I0 sg4 V510(\u53cc\u6cc9\u5821\u4e1c-\u674f\u575b\u8def) p1330 sg6 I1385 sg7 I37 ssI1387 (dp1331 g3 I0 sg4 V439(\u5341\u91cc\u6cb3\u6865\u4e1c-\u767e\u5b50\u6e7e) p1332 sg6 I1387 sg7 I37 ssI1389 (dp1333 g3 I0 sg4 V432(\u897f\u82d1\u67a2\u7ebd\u7ad9-\u5929\u901a\u5317\u82d1) p1334 sg6 I1389 sg7 I37 ssI1391 (dp1335 g3 I0 sg4 V636(\u56de\u5357\u5bb6\u56ed-\u897f\u82d1\u67a2\u7ebd\u7ad9) p1336 sg6 I1391 sg7 I37 ssI1393 (dp1337 g3 I0 sg4 V311(\u5927\u8fd0\u6751\u516c\u4ea4\u573a\u7ad9-\u6765\u5e7f\u8425\u897f\u6865\u4e1c) p1338 sg6 I1393 sg7 I37 ssI1395 (dp1339 g3 I0 sg4 V558(\u970d\u8425\u516c\u4ea4\u573a\u7ad9-\u7acb\u6c34\u6865) p1340 sg6 I1395 sg7 I37 ssI1397 (dp1341 g3 I0 sg4 V\u4e13169(\u897f\u7ea2\u95e8\u516c\u4ea4\u573a\u7ad9-\u6b23\u65fa\u5317\u5927\u8857) p1342 sg6 I1397 sg7 I37 ssI1399 (dp1343 g3 I0 sg4 V479(\u548c\u5e73\u4e1c\u6865-\u4e1c\u5c0f\u53e3\u6751\u59d4\u4f1a) p1344 sg6 I1399 sg7 I37 ssI1401 (dp1345 g3 I0 sg4 V51(\u53cc\u9f99\u5c0f\u533a-\u5609\u56ed\u4e09\u91cc) p1346 sg6 I1401 sg7 I37 ssI1403 (dp1347 g3 I0 sg4 V17(\u524d\u95e8-\u53cc\u5e99) p1348 sg6 I1403 sg7 I39 ssI1405 (dp1349 g3 I0 sg4 V\u4e13119(\u6d77\u9d84\u843d-\u5730\u94c1\u5929\u901a\u82d1\u5317\u7ad9) p1350 sg6 I1405 sg7 I37 ssI1407 (dp1351 g3 I0 sg4 V408(\u6167\u5fe0\u91cc-\u77f3\u4f5b\u8425\u897f\u91cc) p1352 sg6 I1407 sg7 I37 ssI1409 (dp1353 g3 I0 sg4 V387(\u5317\u4eac\u897f\u7ad9-\u6167\u5fe0\u8def\u4e1c\u53e3) p1354 sg6 I1409 sg7 I37 ssI1411 (dp1355 g3 I0 sg4 V602(\u8001\u541b\u5802\u5317\u7ad9-\u4e30\u5317\u6865) p1356 sg6 I1411 sg7 I37 ssI1413 (dp1357 g3 I0 sg4 V478(\u5b66\u77e5\u6865\u5317-\u5c0f\u8f9b\u5e84\u6751) p1358 sg6 I1413 sg7 I37 ssI1415 (dp1359 g3 I0 sg4 V471(\u671b\u4eac\u82b1\u56ed\u897f\u533a\u5317\u95e8-\u5730\u94c1\u671b\u4eac\u897f\u7ad9) p1360 sg6 I1415 sg7 I37 ssI1417 (dp1361 g3 I0 sg4 V573(\u534e\u5a01\u5357\u8def\u4e1c\u53e3-\u4e09\u8425\u95e8) p1362 sg6 I1417 sg7 I37 ssI1419 (dp1363 g3 I0 sg4 V698(\u9999\u5c71-\u57ce\u5357\u5609\u56ed\u5317) p1364 sg6 I1419 sg7 I37 ssI1421 (dp1365 g3 I0 sg4 V387(\u6167\u5fe0\u8def\u4e1c\u53e3-\u5317\u4eac\u897f\u7ad9) p1366 sg6 I1421 sg7 I37 ssI1423 (dp1367 g3 I0 sg4 V753(\u6167\u5fe0\u91cc-\u9a6c\u8fde\u5e97) p1368 sg6 I1423 sg7 I39 ssI1425 (dp1369 g3 I0 sg4 V569(\u5317\u4eac\u4f1a\u8bae\u4e2d\u5fc3-\u59dc\u5e84\u6e56) p1370 sg6 I1425 sg7 I37 ssI1427 (dp1371 g3 I0 sg4 V567(\u5927\u897f\u6d0b\u65b0\u57ce\u5357\u95e8-\u60e0\u65b0\u897f\u8857\u5317\u53e3) p1372 sg6 I1427 sg7 I37 ssI1429 (dp1373 g3 I0 sg4 V567(\u60e0\u65b0\u897f\u8857\u5317\u53e3-\u5927\u897f\u6d0b\u65b0\u57ce\u5357\u95e8) p1374 sg6 I1429 sg7 I37 ssI1431 (dp1375 g3 I0 sg4 V463(\u5317\u4e9a\u82b1\u56ed-\u5730\u94c1\u9f99\u6cfd\u7ad9) p1376 sg6 I1431 sg7 I37 ssI1433 (dp1377 g3 I0 sg4 V21(\u5b89\u534e\u6865\u5317-\u5317\u4eac\u897f\u7ad9) p1378 sg6 I1433 sg7 I37 ssI1435 (dp1379 g3 I0 sg4 V\u4e1359(\u5fb7\u946b\u5609\u56ed-\u7fe0\u6d77\u660e\u82d1) p1380 sg6 I1435 sg7 I37 ssI1437 (dp1381 g3 I0 sg4 V636(\u897f\u82d1\u67a2\u7ebd\u7ad9-\u56de\u5357\u5bb6\u56ed) p1382 sg6 I1437 sg7 I37 ssI1439 (dp1383 g3 I0 sg4 V361(\u5df4\u6c9f\u6751-\u671b\u4eac\u79d1\u6280\u521b\u4e1a\u56ed) p1384 sg6 I1439 sg7 I37 ssI1441 (dp1385 g3 I0 sg4 V620(\u5929\u901a\u5317\u82d1-\u65b0\u8857\u53e3\u8c41\u53e3) p1386 sg6 I1441 sg7 I37 ssI1443 (dp1387 g3 I0 sg4 V698(\u57ce\u5357\u5609\u56ed\u5317-\u9999\u5c71) p1388 sg6 I1443 sg7 I37 ssI1445 (dp1389 g3 I0 sg4 V510(\u674f\u575b\u8def-\u53cc\u6cc9\u5821\u4e1c) p1390 sg6 I1445 sg7 I37 ssI1447 (dp1391 g3 I0 sg4 V490(\u961c\u6210\u95e8\u5185-\u5b9d\u76db\u91cc\u5c0f\u533a) p1392 sg6 I1447 sg7 I37 ssI1449 (dp1393 g3 I0 sg4 V625(\u9f13\u697c\u6865\u897f-\u4e8c\u62e8\u5b50\u65b0\u6751) p1394 sg6 I1449 sg7 I37 ssI1451 (dp1395 g3 I0 sg4 V670(\u5fb7\u80dc\u95e8\u897f-\u767e\u5584\u9547\u653f\u5e9c) p1396 sg6 I1451 sg7 I37 ssI1453 (dp1397 g3 I0 sg4 V51(\u5609\u56ed\u4e09\u91cc-\u53cc\u9f99\u5c0f\u533a) p1398 sg6 I1453 sg7 I37 ssI1455 (dp1399 g3 I0 sg4 V478(\u5c0f\u8f9b\u5e84\u6751-\u5b66\u77e5\u6865\u5317) p1400 sg6 I1455 sg7 I37 ssI1457 (dp1401 g3 I0 sg4 V714(\u961c\u6210\u95e8\u5185-\u9999\u5c71) p1402 sg6 I1457 sg7 I37 ssI1459 (dp1403 g3 I0 sg4 V547(\u548c\u5e73\u897f\u6865-\u671b\u4eac\u5317\u8def\u4e1c\u53e3) p1404 sg6 I1459 sg7 I37 ssI1461 (dp1405 g3 I0 sg4 V66(\u57ce\u5357\u5609\u56ed\u5317-\u524d\u95e8) p1406 sg6 I1461 sg7 I37 ssI1463 (dp1407 g3 I0 sg4 V361(\u671b\u4eac\u79d1\u6280\u521b\u4e1a\u56ed-\u5df4\u6c9f\u6751) p1408 sg6 I1463 sg7 I37 ssI1465 (dp1409 g3 I0 sg4 V630(\u9999\u5c71-\u5927\u8fd0\u6751\u516c\u4ea4\u573a\u7ad9) p1410 sg6 I1465 sg7 I37 ssI1467 (dp1411 g3 I0 sg4 V479(\u4e1c\u5c0f\u53e3\u6751\u59d4\u4f1a-\u548c\u5e73\u4e1c\u6865) p1412 sg6 I1467 sg7 I37 ssI1469 (dp1413 g3 I0 sg4 V311(\u6765\u5e7f\u8425\u897f\u6865\u4e1c-\u5927\u8fd0\u6751\u516c\u4ea4\u573a\u7ad9) p1414 sg6 I1469 sg7 I37 ssI1471 (dp1415 g3 I0 sg4 V305(\u5fb7\u80dc\u95e8-\u5b9d\u76db\u91cc\u5c0f\u533a) p1416 sg6 I1471 sg7 I37 ssI1473 (dp1417 g3 I0 sg4 V609(\u5355\u6751-\u5927\u949f\u5bfa) p1418 sg6 I1473 sg7 I37 ssI1475 (dp1419 g3 I0 sg4 V432(\u5929\u901a\u5317\u82d1-\u897f\u82d1\u67a2\u7ebd\u7ad9) p1420 sg6 I1475 sg7 I37 ssI1477 (dp1421 g3 I0 sg4 V484(\u5730\u94c1\u5317\u82d1\u7ad9-\u5317\u533b\u4e09\u9662) p1422 sg6 I1477 sg7 I37 ssI1479 (dp1423 g3 I0 sg4 V476(\u5b9d\u76db\u91cc\u5c0f\u533a-\u897f\u82d1\u67a2\u7ebd\u7ad9) p1424 sg6 I1479 sg7 I37 ssI1481 (dp1425 g3 I0 sg4 V573(\u4e09\u8425\u95e8-\u534e\u5a01\u5357\u8def) p1426 sg6 I1481 sg7 I37 ssI1483 (dp1427 g3 I0 sg4 V307(\u5df4\u6c9f\u6751-\u56de\u9f99\u89c2\u516c\u4ea4\u573a\u7ad9) p1428 sg6 I1483 sg7 I37 ssI1485 (dp1429 g3 I0 sg4 V547(\u671b\u4eac\u5317\u8def\u4e1c\u53e3-\u548c\u5e73\u897f\u6865) p1430 sg6 I1485 sg7 I37 ssI1487 (dp1431 g3 I0 sg4 V\u4e1381(\u5730\u94c1\u7acb\u6c34\u6865\u5357\u7ad9-\u5317\u82d1\u516c\u4ea4\u573a\u7ad9) p1432 sg6 I1487 sg7 I37 ssI1489 (dp1433 g3 I0 sg4 V39(\u5317\u4eac\u7ad9\u4e1c-\u53cc\u5e99) p1434 sg6 I1489 sg7 I37 ssI1491 (dp1435 g3 I0 sg4 V490(\u5b9d\u76db\u91cc\u5c0f\u533a-\u961c\u6210\u95e8\u5185) p1436 sg6 I1491 sg7 I37 ssI1493 (dp1437 g3 I0 sg4 V\u4e13169(\u6b23\u65fa\u5317\u5927\u8857-\u897f\u7ea2\u95e8\u516c\u4ea4\u573a\u7ad9) p1438 sg6 I1493 sg7 I37 ssI1495 (dp1439 g3 I0 sg4 V696(\u9ec4\u6e2f\u6751-\u9999\u5c71) p1440 sg6 I1495 sg7 I37 ssI1497 (dp1441 g3 I0 sg4 V39(\u53cc\u5e99-\u5317\u4eac\u7ad9\u4e1c) p1442 sg6 I1497 sg7 I37 ssI1499 (dp1443 g3 I0 sg4 V602(\u4e30\u5317\u6865-\u8001\u541b\u5802\u5317\u7ad9) p1444 sg6 I1499 sg7 I37 ssI1501 (dp1445 g3 I0 sg4 V569(\u59dc\u5e84\u6e56-\u5317\u4eac\u4f1a\u8bae\u4e2d\u5fc3) p1446 sg6 I1501 sg7 I37 ssI1503 (dp1447 g3 I0 sg4 V307(\u56de\u9f99\u89c2\u516c\u4ea4\u573a\u7ad9-\u5df4\u6c9f\u6751) p1448 sg6 I1503 sg7 I37 ssI1505 (dp1449 g3 I0 sg4 V17(\u53cc\u5e99-\u524d\u95e8) p1450 sg6 I1505 sg7 I39 ssI1507 (dp1451 g3 I0 sg4 V753(\u9a6c\u8fde\u5e97-\u6167\u5fe0\u91cc) p1452 sg6 I1507 sg7 I39 ssI1509 (dp1453 g3 I0 sg4 V630(\u5927\u8fd0\u6751\u516c\u4ea4\u573a\u7ad9-\u9999\u5c71) p1454 sg6 I1509 sg7 I37 ssI1511 (dp1455 g3 I0 sg4 V\u4e1343(\u5b9d\u76db\u91cc\u5c0f\u533a\u897f\u884c-\u5b9d\u76db\u91cc\u5c0f\u533a\u4e1c\u884c) p1456 sg6 I1511 sg7 I37 ssI1513 (dp1457 g3 I0 sg4 V463(\u5730\u94c1\u9f99\u6cfd\u7ad9-\u5317\u4e9a\u82b1\u56ed) p1458 sg6 I1513 sg7 I37 ssI1515 (dp1459 g3 I0 sg4 V609(\u5927\u949f\u5bfa-\u5355\u6751) p1460 sg6 I1515 sg7 I37 ssI1517 (dp1461 g3 I0 sg4 V\u4e13117(\u71d5\u4e39-\u5929\u901a\u897f\u82d1\u5357) p1462 sg6 I1517 sg7 I37 ssI1519 (dp1463 g3 I0 sg4 V670(\u767e\u5584\u9547\u653f\u5e9c-\u5fb7\u80dc\u95e8\u897f) p1464 sg6 I1519 sg7 I37 ssI1521 (dp1465 g3 I0 sg4 V319(\u5929\u901a\u5317\u82d1-\u5927\u5c6f\u4e1c) p1466 sg6 I1521 sg7 I37 ssI1523 (dp1467 g3 I0 sg4 V476(\u897f\u82d1\u67a2\u7ebd\u7ad9-\u5b9d\u76db\u91cc\u5c0f\u533a) p1468 sg6 I1523 sg7 I37 ssI1525 (dp1469 g3 I0 sg4 V404(\u4e1c\u76f4\u95e8\u67a2\u7ebd\u7ad9-\u6765\u5e7f\u8425\u897f\u6865\u4e1c) p1470 sg6 I1525 sg7 I37 ssI1527 (dp1471 g3 I0 sg4 V696(\u9999\u5c71-\u9ec4\u6e2f\u6751) p1472 sg6 I1527 sg7 I37 ssI1529 (dp1473 g3 I0 sg4 V584(\u5927\u949f\u5bfa-\u9890\u548c\u5c71\u5e84) p1474 sg6 I1529 sg7 I39 ssI1531 (dp1475 g3 I0 sg4 V584(\u9890\u548c\u5c71\u5e84-\u5927\u949f\u5bfa) p1476 sg6 I1531 sg7 I39 ssI1533 (dp1477 g3 I0 sg4 V691(\u97e9\u5e84\u5b50\u5317-\u7d22\u5bb6\u575f) p1478 sg6 I1533 sg7 I39 ssI1535 (dp1479 g3 I0 sg4 V695(\u5317\u4eac\u897f\u7ad9-\u65f6\u4ee3\u5e84\u56ed\u5317\u7ad9) p1480 sg6 I1535 sg7 I39 ssI1537 (dp1481 g3 I0 sg4 V717(\u83dc\u6237\u8425\u6865\u4e1c-\u5730\u94c1\u897f\u4e8c\u65d7\u7ad9) p1482 sg6 I1537 sg7 I39 ssI1539 (dp1483 g3 I0 sg4 V55(\u7941\u5bb6\u8c41\u5b50-\u897f\u5b89\u95e8) p1484 sg6 I1539 sg7 I39 ssI1541 (dp1485 g3 I0 sg4 V717(\u5730\u94c1\u897f\u4e8c\u65d7\u7ad9-\u83dc\u6237\u8425\u6865\u4e1c) p1486 sg6 I1541 sg7 I39 ssI1543 (dp1487 g3 I0 sg4 V431(\u5355\u5e97-\u4e1c\u56db\u5341\u6761\u6865\u4e1c) p1488 sg6 I1543 sg7 I39 ssI1545 (dp1489 g3 I0 sg4 V695(\u65f6\u4ee3\u5e84\u56ed\u5317\u7ad9-\u5317\u4eac\u897f\u7ad9) p1490 sg6 I1545 sg7 I39 ssI1547 (dp1491 g3 I0 sg4 V615(\u795e\u8def\u8857-\u5218\u5e84\u5317\u7ad9) p1492 sg6 I1547 sg7 I39 ssI1549 (dp1493 g3 I0 sg4 V431(\u4e1c\u56db\u5341\u6761\u6865\u4e1c-\u5355\u5e97) p1494 sg6 I1549 sg7 I39 ssI1551 (dp1495 g3 I0 sg4 V422(\u5b89\u8d1e\u6865\u5317-\u6765\u5e7f\u8425\u897f\u6865\u4e1c) p1496 sg6 I1551 sg7 I39 ssI1553 (dp1497 g3 I0 sg4 V615(\u5218\u5e84\u5317\u7ad9-\u795e\u8def\u8857) p1498 sg6 I1553 sg7 I39 ssI1555 (dp1499 g3 I0 sg4 V55(\u897f\u5b89\u95e8-\u7941\u5bb6\u8c41\u5b50) p1500 sg6 I1555 sg7 I39 ssI1557 (dp1501 g3 I0 sg4 V422(\u6765\u5e7f\u8425\u897f\u6865\u4e1c-\u5b89\u8d1e\u6865\u5317) p1502 sg6 I1557 sg7 I39 ssI1559 (dp1503 g3 I0 sg4 V536(\u5c4f\u7fe0\u897f\u8def\u4e1c\u53e3-\u5de6\u5bb6\u5e84) p1504 sg6 I1559 sg7 I39 ssI1561 (dp1505 g3 I0 sg4 V127(\u5730\u94c1\u67f3\u82b3\u7ad9-\u5317\u4eac\u7ad9\u897f) p1506 sg6 I1561 sg7 I39 ssI1563 (dp1507 g3 I0 sg4 V691(\u6587\u6167\u6865\u5357-\u97e9\u5e84\u5b50\u5317) p1508 sg6 I1563 sg7 I39 ssI1565 (dp1509 g3 I0 sg4 V536(\u5de6\u5bb6\u5e84-\u5c4f\u7fe0\u897f\u8def\u4e1c\u53e3) p1510 sg6 I1565 sg7 I39 ssI1567 (dp1511 g3 I0 sg4 V127(\u5317\u4eac\u7ad9\u897f-\u5730\u94c1\u67f3\u82b3\u7ad9) p1512 sg6 I1567 sg7 I39 ss. ================================================ FILE: slack_bot/plugins/dianping.py ================================================ # coding=utf-8 import re import hashlib from functools import partial from flask import current_app as app import requests from baidumap import address2geo from utils import gen_attachment description = """ [大众点评]查找附近美食: "[城市名(默认北京市, 要带`市`)] xx有什么美食|xx附近美食 [带图] [私聊]",比如: * 酒仙桥附近美食 * 上海市 宜山路455号有什么美食(上海uber) """ API_URL = 'http://api.dianping.com/v1/{0}/{1}' TEST_TXT_REGEX = re.compile(r'(.*)\(.*\.\.\.\)') GOODS_REGEX = re.compile(r'(.*)附近美食|(.*)有什么美食|(.*?)美食(.*?)') CITY_REGEX = re.compile(ur'(\W?)(.*)市', re.UNICODE) def real_name(name): match = TEST_TXT_REGEX.search(name) if match: name = match.groups()[0] return name def concat_params(appkey, secret, params): codec = appkey for key in sorted(params.keys()): codec += key + str(params[key]) codec += secret # 签名计算 sign = (hashlib.sha1(codec).hexdigest()).upper() url_trail = 'appkey=' + appkey + '&sign=' + sign for pair in params.items(): url_trail += '&' + pair[0] + '=' + str(pair[1]) return '?' + url_trail class DianpingApi(object): def __init__(self, appkey, secret): self.concat_params = partial(concat_params, appkey, secret) def bind_api(self, path, subpath, params): params.pop('self') path_url = API_URL.format(path, subpath) + self.concat_params(params) r = requests.get(path_url) return r.json() def get_business_info(self, business, details=False): url = business['business_url'] # 商户页面URL链接 # id = business['business_id'] distance = business['distance'] # 商户与参数坐标的距离,单位为米 # coupon_description = business['coupon_description'] # 优惠券描述 # deals_description = ','.join([ # c['description'] for c in business['deals']]) # 团购描述 name = real_name(business['name']) # 商户名 # branch_name = business['branch_name'] # 分店名 address = business['address'] # 地址 telephone = business['telephone'] # 电话 # avg_rating = business['avg_rating'] # 星级评分,5.0代表五星,4.5代表四星半,依此类推 photo_url = business['photo_url'] if details: product_grade = business['product_grade'] # noqa 产品/食品口味评价,1:一般,2:尚可,3:好,4:很好,5:非常好 # decoration_grade = business['decoration_grade'] # 环境评价 同上 # service_grade = business['service_grade'] # 服务评价 同上 # avg_price = business['avg_price'] # 均价格,单位:元,若没有人均,返回-1 text = u'<{0}|{1}> {2} {3} 距离: {4} '.format( url, name, address, telephone, distance) attach = gen_attachment( u'{0} {1} 距离: {2}'.format(address, telephone, distance), photo_url, image_type='thumb', title=name, title_link=url) return text, attach def find_businesses(self, latitude, longitude, city='上海', category='美食', sort=1, limit=20, offset_type=1, out_offset_type=1, platform=2): return self.bind_api('business', 'find_businesses', locals())['businesses'] def get_single_business(self, business_id, out_offset_type=1, platform=1): return self.bind_api('business', 'get_single_business', locals())['businesses'] def get_all_id_list(self, city='北京'): return self.bind_api('reservation', 'get_all_id_list', locals())['id_list'] def get_batch_businesses_by_id(self, business_ids, out_offset_type=1): if isinstance(business_ids, str): business_ids = business_ids.split(',') return self.bind_api('reservation', 'get_batch_businesses_by_id', locals())['businesses'] def find_businesses_with_reservations(self, reservation_date, reservation_time, number_of_people): return self.bind_api('reservation', 'find_businesses_with_reservations', locals())['businesses'] def test(data): return any([i in data['message'] for i in ['有什么美食', '大众点评', '附近美食']]) def handle(data): message = data['message'] if app is None: appkey = '41502445' secret = 'f0c2cc0b4f1048bebffc1527acbaeeb8' ak = '18691b8e4206238f331ad2e1ca88357e' else: appkey = app.config.get('DIANPING_APPKEY') secret = app.config.get('DIANPING_SECRET') ak = app.config.get('BAIDU_AK') api = DianpingApi(appkey, secret) match = CITY_REGEX.search(message.decode('utf-8')) city = match.groups()[1].encode('utf-8') if match else '北京' match = GOODS_REGEX.search(message) limit = 20 if match: address = next((m for m in match.groups() if m is not None), '') geo = address2geo(ak, address) if not geo: return '找不到这个地址的数据' res = api.find_businesses(geo['lat'], geo['lng'], city=city) else: business_ids = api.get_all_id_list(city) res = api.get_batch_businesses_by_id(business_ids[:limit]) ret = [api.get_business_info(r) for r in res] return '\n'.join([r[0] for r in ret]), [r[1] for r in ret] if __name__ == '__main__': print handle({'message': '酒仙桥附近美食'}) print handle({'message': '上海市 宜山路455号有什么美食(上海uber)'}) ================================================ FILE: slack_bot/plugins/earthquake.py ================================================ # !/usr/bin/env python # -*-coding:utf-8-*- """ Copyright (c) 2012 Qijiang Fan Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ # 地震 import urllib2 import re description = """ 最近发生的地震信息。触发条件:"地震了 [私聊]", 比如: * 地震了 """ def test(data): return '地震了' in data['message'] def jw(a, b): aa = '' bb = '' if int(a.replace('.', '')) > 0: aa = '北纬' + a + '度' elif int(a.replace('.', '')) < 0: aa = '南纬' + a.replace('-', '') + '度' else: aa = '赤道附近' if int(b.replace('.', '')) > 0: bb = '东经' + b + '度' elif int(b.replace('.', '')) < 0: bb = '西经' + b.replace('-', '') + '度' else: bb = '本初子午线附近' return ','.join((aa, bb)) def handle(data): r = urllib2.urlopen( 'http://data.earthquake.cn/datashare/globeEarthquake_csn.html', timeout=5) t = [re.sub('(<[^>]*>|[\r\n])', '', a) for a in r.read().decode('gbk').encode('utf-8').split('\n')[170:178]] return '最近一次地震发生在%s(%s),发生时间%s,震级%s,震源深度%s千米,地震类型为%s。' %\ (t[7], jw(t[2], t[3]), ' '.join(t[0:2]), t[5], t[4], t[6]) if __name__ == '__main__': print handle({'message': '地震了吗?'}) ================================================ FILE: slack_bot/plugins/events.py ================================================ # coding=utf-8 from __future__ import division from datetime import date import jieba import requests from bs4 import BeautifulSoup from slack_bot.ext import cache from utils import check_cache description = """ 获取以下网站的活动列表: http://segmentfault.com/events http://huiyi.csdn.net/activity/home http://www.chekucafe.com/Party http://www.huodongxing.com/events 触发条件: "最近有什么活动 [城市名称] [私聊]"。比如: * 最近有什么活动 * 最近有什么活动 北京 """ TODAY = date.today().strftime('%m-%d') # segmentfault SF_URL = 'http://segmentfault.com' SF_EVENT_URL = 'http://segmentfault.com/events?city={0}' SF_CITIES_MAP = { u'\u4e0a\u6d77': 310100, u'\u5317\u4eac': 110100, u'\u5357\u4eac': 320100, u'\u53a6\u95e8': 350200, u'\u53f0\u5317': 710100, u'\u5408\u80a5': 340100, u'\u5e7f\u5dde': 440100, u'\u6210\u90fd': 510100, u'\u65b0\u52a0\u5761': 190, u'\u676d\u5dde': 330100, u'\u6b66\u6c49': 420100, u'\u6df1\u5733': 440300, u'\u70df\u53f0': 370600, u'\u897f\u5b89': 610100, u'\u957f\u6c99': 430100, u'\u97e9\u56fd': 198 } # 活动行(默认是科技频道) HDX_EVENT_URL = 'http://www.huodongxing.com/events?orderby=n&tag=%E7%A7%91%E6%8A%80&city{0}&page={1}' # noqa HDX_URL = 'http://www.huodongxing.com' HDX_MAX_PAGE = 10 # 车库咖啡 CK_EVENT_URL = 'http://www.chekucafe.com/Party' CK_URL = 'http://www.chekucafe.com' # CSDN 最近一个月的 CSDN_EVENT_URL = 'http://huiyi.csdn.net/activity/home?c={0}&s=one_month&page={1}' # noqa CSDN_CITIES_MAP = { u'\u4e0a\u6d77': '2', u'\u4e91\u5357': '25', u'\u5185\u8499\u53e4': '7', u'\u5317\u4eac': '1', u'\u53f0\u6e7e': '34', u'\u5409\u6797': '9', u'\u56db\u5ddd': '23', u'\u5929\u6d25': '3', u'\u5b81\u590f': '29', u'\u5b89\u5fbd': '13', u'\u5c71\u4e1c': '16', u'\u5c71\u897f': '6', u'\u5e7f\u4e1c': '20', u'\u5e7f\u897f': '21', u'\u65b0\u7586': '31', u'\u6c5f\u82cf': '11', u'\u6c5f\u897f': '15', u'\u6cb3\u5317': '5', u'\u6cb3\u5357': '17', u'\u6d59\u6c5f': '12', u'\u6d77\u5357': '22', u'\u6e56\u5317': '18', u'\u6e56\u5357': '19', u'\u6fb3\u95e8': '33', u'\u7518\u8083': '28', u'\u798f\u5efa': '14', u'\u897f\u85cf': '26', u'\u8d35\u5dde': '24', u'\u8fbd\u5b81': '8', u'\u91cd\u5e86': '4', u'\u9655\u897f': '27', u'\u9752\u6d77': '30', u'\u9999\u6e2f': '32', u'\u9ed1\u9f99\u6c5f': '10' } FILTER_WORDS = [ u'推广', u'论坛', u'产业', u'敏捷', u'管理', u'形势', u'研讨会', u'选拔', u'寻找', u'博览会', u'展', u'招募', u'会员', u'职业', u'嘉年华', u'内测', 'office', u'报名', u'交流', u'讲座' ] THRESHOLD = 0.7 def check_filter(title): for word in FILTER_WORDS: if word in title: return True return False def get_df_events(city): id = SF_CITIES_MAP.get(city, SF_CITIES_MAP[u'北京']) r = requests.get(SF_EVENT_URL.format(id)) soup = BeautifulSoup(r.text) for event in soup.findAll('div', {'class': 'widget-event'}): if u'报名' in event.find('a', {'class': 'btn-sm'}).text: h2 = event.find('h2') title = h2.text if check_filter(title): continue time, others = [i.text for i in event.findAll('li')] url = SF_URL + h2.find('a').attrs.get('href') yield title, url, time, others else: break def get_hdx_events(city, res=[], page=1): r = requests.get(HDX_EVENT_URL.format(city.encode('utf-8'), page)) soup = BeautifulSoup(r.text) uls = soup.findAll('ul', {'class': 'event-vertical-list-new'}) for ul in uls: for li in ul.findAll('li'): a = li.find('h3').find('a') title = a.text if check_filter(title): continue pull = li.find('span', {'class': 'pull-right'}).text time = li.find( 'div', {'class': 'time'}).text.replace(pull, '').strip() if time <= TODAY: continue favorites, user = pull.split('|') url = HDX_URL + a.attrs.get('href') res.append((title, url, time, u'收藏: {0}| 报名: {1}'.format(favorites, user))) if page == HDX_MAX_PAGE: return res page += 1 return get_hdx_events(city, res=res, page=page) def get_ck_events(city): r = requests.get(CK_EVENT_URL) soup = BeautifulSoup(r.text) for li in soup.find(id='party-list').findAll('li'): title = li.find('h3').text if check_filter(title): continue url = CK_URL + li.find('a').attrs.get('href') tds = li.findAll('td') time = tds[0].text others = u'|'.join([td.text for td in tds[2:]]) yield title, url, time, others def get_csdn_events(city, res=[], page=1): id = CSDN_CITIES_MAP.get(city, CSDN_CITIES_MAP[u'北京']) r = requests.get(CSDN_EVENT_URL.format(id, page)) soup = BeautifulSoup(r.text) for item in soup.find('div', {'class': 'list-wraper'}).findAll( 'div', {'class': 'item'}): a = item.find('a') title = a.attrs.get('title') if check_filter(title): continue url = a.attrs.get('href') dd = item.findAll('dd') time = dd.pop(1).text others = u'|'.join([d.text.replace('\n', '.') for d in dd]) res.append((title, url, time, others)) # 判断是否有下一页 nav = soup.find('span', {'class': 'page-nav'}) if nav.find( 'a', {'class': 'btn-next'}).attrs.get('href').endswith(str(page)): return res page += 1 return get_csdn_events(city, res=res, page=page) def check_similar(seg_, seg_lists): seg_len = len(seg_) for seg_list in seg_lists: seg_list_len = len(seg_list) len_ = seg_list_len if seg_len > seg_len else seg_len if len(seg_.intersection(seg_list)) / len_ > THRESHOLD: return True return False def get_events(city): all_events = [ ('SegmentFault', get_df_events(city)), (u'活动行', get_hdx_events(city)), ('csdn', get_csdn_events(city)) ] if city == u'北京': all_events.insert(1, (u'车库咖啡', get_ck_events(city))) events = [] seg_lists = [] for org_name, org_events in all_events: for title, url, time, others in org_events: seg_ = set(jieba.cut(title)) if check_similar(seg_, seg_lists): continue seg_lists.append(seg_) events.append( u'<{0}|[{1}] {2}> {3} {4}'.format( url, org_name, title, time, others)) return events def test(data): return '最近有什么活动' in data['message'] def handle(data): message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') msg = message.split() if len(msg) == 1 or (len(msg) == 2 and u'私聊' in msg[1]): city = u'北京' else: city = msg[1] return '\n'.join(check_cache(cache, get_events, city)) if __name__ == '__main__': print handle({'message': '最近有什么活动'}) print handle({'message': '最近有什么活动 上海'}) ================================================ FILE: slack_bot/plugins/github_issue.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import current_app as app import requests description = """ 当前 github 组织下所有未关闭的 issues && PR。触发条件: "issue [私聊]"。比如: * issue """ ISSUE_API = "https://api.github.com/repos/{org}/{repo}/issues" REPO_API = "https://api.github.com/orgs/{org}/repos" def test(data): return 'issue' in data['message'] def handle(data): org_name = app.config.get('ORG_NAME', 'python-cn') repos = requests.get(REPO_API.format(org=org_name)).json() rv = '' for repo in repos: repo_name = repo['name'] issues_count = repo['open_issues_count'] if issues_count != 0: issues = requests.get(ISSUE_API.format(org=org_name, repo=repo_name)).json() rv += '*{repo_name}\n'.format(repo_name=repo_name) for issue in issues: rv += 'Issue {}:'.format(issue['number']) rv += issue['title'].encode('utf-8') + '\n' rv += issue['html_url'].encode('utf-8') + '\n' rv += '\n' return rv if rv else 'no issue' if __name__ == '__main__': from flask import Flask app = Flask(__name__) app.config['org_name'] = 'python-cn' print handle(None) ================================================ FILE: slack_bot/plugins/help.py ================================================ # coding=utf-8 from flask import current_app description = """ 帮助信息,触发条件: "help [私聊]". 比如: * help """ def format_desc(plugin, prefix=' '): name = plugin.__name__.split('.')[-1] desc = getattr(plugin, 'description', '').strip() # 为每行内容增加前缀 desc = ('\n' + prefix).join(desc.split('\n')) return '{name}:\n{prefix}{desc}'.format( name=name, prefix=prefix, desc=desc ) def test(data): return 'help' in data['message'] def handle(data): app = current_app plugin_modules = app.plugin_modules if app else [] docs = [] for plugin in plugin_modules: docs.append(format_desc(plugin)) return '\n'.join(docs) ================================================ FILE: slack_bot/plugins/movie.py ================================================ # coding=utf-8 from flask import current_app import requests from bs4 import BeautifulSoup from .utils import to_pinyin, gen_attachment, upload_image from ..utils import timeout description = """ 最近上映的电影信息。触发条件: "[上映 | 热映 | 有什么 | 将] 电影 [上映 | 热映 | 有什么 | 将] [城市名称] [带图] [私聊]" 比如: * 最近要将上映的电影 * 有什么电影 上海 """ CURRENT_URL = 'http://movie.douban.com/nowplaying/{0}/' LATER_URL = 'http://movie.douban.com/later/{0}/' def get_later_movie_info(city, app): r = requests.get(LATER_URL.format(city)) soup = BeautifulSoup(r.text) items = soup.find(id='showing-soon').findAll('div', {'item'}) for i in items: h = i.find('h3').find('a') url = h.attrs['href'] title = h.text content = '|'.join([li.text for li in i.findAll('li')[:4]]) image_url = i.find('a').find('img').attrs.get('src', '') # SA好变态, 感觉是防盗链了,下同 image_url = upload_image(image_url, 'thumb', app) yield u'<{url}|{title}> {content}'.format(**locals()), gen_attachment( content, image_url, image_type='thumb', title=title, title_link=url) def get_current_movie_info(city, app): r = requests.get(CURRENT_URL.format(city)) soup = BeautifulSoup(r.text) items = soup.find(id='nowplaying').find('ul', {'class': 'lists'}).findAll( 'li', {'class': 'poster'}) count = 0 for i in items: if count >= 10: continue img = i.find('img') title = img.attrs.get('alt', '') content = '|'.join([li.text for li in i.findAll('li')[:4]]) url = i.find('a').attrs.get('href', '') image_url = img.attrs.get('src', '') image_url = upload_image(image_url, 'thumb', app) count += 1 yield u'<{url}|{title}>'.format(**locals()), gen_attachment( content, image_url, image_type='thumb', title=title, title_link=url) def test(data): return '电影' in data['message'] and \ any([i in data['message'] for i in ['上映', '热映', '有什么', '将']]) def handle(data): ret = [] def timeout_handle(): return '\n'.join([r[0] for r in ret]), [r[1] for r in ret] @timeout(15, default=timeout_handle) def _handle(data, app): message = data['message'] if not isinstance(message, unicode): message = message.decode('utf-8') msg = message.split() if len(msg) == 1 or (len(msg) == 2 and u'私聊' in msg[1]): city = 'beijing' else: city = to_pinyin(msg[1]) if u'将' in message: fn = get_later_movie_info else: fn = get_current_movie_info for r in fn(city, app): ret.append(r) return '\n'.join([r[0] for r in ret]), [r[1] for r in ret] app = current_app._get_current_object() return _handle(data, app) if __name__ == '__main__': print handle({'message': '最近要将上映的电影'}) print handle({'message': '有什么电影 上海'}) ================================================ FILE: slack_bot/plugins/orz.py ================================================ # -*-coding:utf-8-*- """ Copyright (c) 2012 wong2 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ # 来膜拜 import random description = """ 快来膜拜我!, 触发条件: "膜拜 | orz [私聊]"。比如: * 膜拜 * orz """ def test(data): message = data['message'] for word in ['膜拜', 'orz']: if word in message: return True return False def handle(data): mobai_icon = ':mb:' return mobai_icon * random.randrange(1, 10) if __name__ == '__main__': print test({'message': 'orz'}) print test({'message': 'rz'}) print handle({'message': '来膜拜'}) ================================================ FILE: slack_bot/plugins/pycoders.py ================================================ # coding=utf-8 import re from HTMLParser import HTMLParser import requests from bs4 import BeautifulSoup from slack_bot.ext import cache from utils import check_cache description = """ Pycoders Weekly。触发条件: "pycoders [list | ISSUE_ID] [私聊]"。比如: * pycoders * pycoders list * pycoders 20 """ API = 'http://us4.campaign-archive1.com/generate-js/?u=9735795484d2e4c204da82a29&fid=1817&show=500' # noqa ISSUES_REGEX = re.compile(r'
(.*?)<\\/a><\\/div>') ISSUE_REGEX = re.compile( ur'(\d+\\/\d+\\/\d+).*href=\\"(.*)\\" title=\\"(.*?)\\"', re.UNICODE) # noqa TITLE_REGEX = re.compile(ur'Issue(.*)\)(\W*?):(\W*?)(.*)', re.UNICODE) # noqa SPAN_REGEX = re.compile(r'(.*)') GET_ISSUE_KEY = 'pycoders:issue:{0}' LIST_ISSUE_KEY = 'pycoders:issue:list' class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): self._tag = tag for name, value in attrs: if name == 'href': self._href = value def handle_data(self, data): self._data = data def get_all_issues(): r = requests.get(API) issues = ISSUES_REGEX.findall(r.text) for issue in issues: date_, url, title = ISSUE_REGEX.search(issue).groups() date_ = date_.replace('\\', '') url = url.replace('\\', '') match = TITLE_REGEX.search(title) if match: no, _, _, title = match.groups() no = no.strip() title = title.strip().replace('\u00a0', '') else: title = title.replace('Pycoders Weekly', '').strip() no = '' yield date_, url, no, title def prase_tag(tag): text = '' parser = MyHTMLParser() count = 0 block = [None] * 3 # [url, title, content] for t in tag.contents: t = unicode(t).strip() if not t or t in ('
') or 'Shared by' in t: continue parser.feed(t) if parser._tag == 'h2': if text: text += '\n\n' text += parser._data + '\n' elif parser._tag == 'a': if not count % 2: block[0] = parser._href count += 1 elif parser._tag == 'span': if t.startswith('{2}'.format(*block) + '\n' block = [None] * 3 parser._tag = None parser._href = None parser._data = None return text def parse_issue_page(url): r = requests.get(url) soup = BeautifulSoup(r.text) return '\n'.join([ prase_tag(soup.findAll('td', {'class': 'mcnTextContent'})[index]) for index in (6, 8, 9) ]) def get_issue(num=None): issues = list(get_all_issues()) if num is None: num = len(issues) try: issue = list(get_all_issues())[::-1][num-1] except IndexError: return u'找不到这期咯' return parse_issue_page(issue[1]) def list_issues(): return '\n'.join([ '{0} <{1} |Issue {2}: {3}>'.format(date_, url, no, title) for date_, url, no, title in get_all_issues() ]) def test(data): return 'pycoder' in data['message'] def handle(data): msg = data['message'].split() if len(msg) == 1: return check_cache(cache, get_issue) elif msg[1] == 'list': return check_cache(cache, list_issues) elif msg[1].isdigit(): return check_cache(cache, get_issue, int(msg[1])) return ('`pycoder`默认获得最近一次的weekly\n' '`pycoder list`获取全部weekly列表\n' '`pycoder X`获得第X次weekly') if __name__ == '__main__': print handle({'message': 'pycoder'}) print handle({'message': 'pycoder list'}) print handle({'message': 'pycoder 167'}) ================================================ FILE: slack_bot/plugins/pythonweekly.py ================================================ # coding=utf-8 import re import requests from bs4 import BeautifulSoup from slack_bot.ext import cache from utils import check_cache from pycoders import MyHTMLParser URL = 'http://us2.campaign-archive1.com/home/?u=e2e180baf855ac797ef407fc7&id=9e26887fc5' # noqa ISSUE_REGEX = re.compile(r'(\d+\/\d+\/\d+).*Issue\W+(\d+)') GET_ISSUE_KEY = 'pythonweekly:issue:{0}' LIST_ISSUE_KEY = 'pythonweekly:issue:list' MAX_LENGTH = 120 description = """ Python Weekly。触发条件: "pythonweekly [list | ISSUE_ID] [私聊]"。比如: * pythonweekly * pythonweekly list * pythonweekly 20 """ def get_all_issues(): r = requests.get(URL) soup = BeautifulSoup(r.text) for li in soup.findAll('li', {'class': 'campaign'}): url = li.find('a').attrs.get('href') time, no = ISSUE_REGEX.search(li.text).groups() yield url, no, time def parse_issue_page(url): r = requests.get(url) soup = BeautifulSoup(r.text) tag = soup.find('td', {'class': 'defaultText'}) text = [] parser = MyHTMLParser() start = False block = [None] * 3 # [url, title, content] for t in tag.contents: t = unicode(t).strip() if not t or t in ('
'): continue parser.feed(t) if parser._data == 'News': start = True if not start: continue if parser._tag == 'a': block[1] = parser._data block[0] = parser._href elif '<' not in t: if parser._data < MAX_LENGTH: block[2] = parser._data else: block[2] = parser._data[:MAX_LENGTH] + '...' elif parser._tag == 'span': text.append('\n{}'.format(parser._data)) parser._tag = None parser._href = None parser._data = None if not filter(lambda x: x is None, block): text.append(u'<{0} |{1}>{2}'.format(*block)) block = [None] * 3 return '\n'.join(text) def list_lastest_issues(): return '\n'.join([ '<{0} |Issue {1}: {2}>'.format(url, no, time) for url, no, time in get_all_issues() ]) def get_issue_pw(num=None): issues = list(get_all_issues()) if num is None: num = len(issues) try: issue = list(get_all_issues())[::-1][num-1] except IndexError: return u'找不到这期咯' return parse_issue_page(issue[0]) def test(data): return all([i in data['message'] for i in ['python', 'weekly']]) def handle(data): msg = data['message'].split() if len(msg) == 1: return check_cache(cache, get_issue_pw) elif msg[1] == 'list': return check_cache(cache, list_lastest_issues) elif msg[1].isdigit(): return check_cache(cache, get_issue_pw, int(msg[1])) return ('`pythonweekly`默认获得最近一次的weekly\n' '`pythonweekly list`获取最近20个weekly列表(找不到更早的了)\n' '`pythonweekly X`获得倒数第X次weekly(X不能超过20)') if __name__ == '__main__': print handle({'message': 'pythonweekly'}) print handle({'message': 'pythonweekly list'}) print handle({'message': 'pythonweekly 1'}) ================================================ FILE: slack_bot/plugins/qiubai.py ================================================ # coding:utf-8 """ Copyright (c) 2013 Xiangyu Ye Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ description = """ 糗事百科TOP10。触发条件: "糗百 | 笑话 [私聊]"。比如: * 糗百 * 笑话 """ # 糗事百科TOP10 import urllib2 import re import time import random from slack_bot.ext import cache key = time.strftime('%y-%m-%d') def test(data): return any(w in data['message'] for w in ['糗百', '笑话']) def handle(data): if cache is not None: r = cache.get(key) if r: return random.choice(r) r = urllib2.urlopen('http://feedproxy.feedburner.com/qiubai', timeout=60) p = r.read() r = re.findall('<\!\[CDATA\[

(.*)
', p) if r: if cache is not None: cache.set(key, r, 1800) return random.choice(r) else: raise Exception if __name__ == '__main__': print handle({'message': '糗百'}) print handle({'message': '笑话'}) ================================================ FILE: slack_bot/plugins/simsimi.py ================================================ # -*-coding:utf-8-*- """ Copyright (c) 2012 wong2 Copyright (c) 2012 hupili Original Author: Wong2 Changes Statement: Changes made by Pili Hu on Jan 13 2013: Support Keepalive by using requests.Session Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ # 从simsimi读数据 import sys sys.path.append('..') import requests import random try: from settings import SIMSIMI_KEY except: SIMSIMI_KEY = '50c086cb-5ea3-4190-bdd6-69787a540ec4' description = """ 色色的小黄鸡。触发条件:所有未触发其他插件的内容。 """ COOKIE = """ sid=s%3AcsxS39Tq1oLXQj5WKdBN7UZz.T%2FdtU%2BGkt056rKQb %2BwmwD0iJXguRCsyRsv6745ftwfk; Filtering=0.0; Filtering=0.0; isFirst=1; isFirst=1; simsimi_uid=102256985; simsimi_uid=102256985; selected_nc_name=Chinese%20%u2013%20Simplified%20%28%u7C21%u9AD4%29; selected_nc_name=Chinese%20%u2013%20Simplified%20%28%u7C21%u9AD4%29; simsimi_makeup=undefined; simsimi_makeup=undefined; selected_nc=ch; selected_nc=ch; __utmt=1; __utma=119922954.1015526052.1433822720. 1433826650.1433836017.4; __utmb=119922954.8.9.1433836034315; __utmc=119922954; __utmz=119922954.1433822720.1.1.utmcsr=(direct) |utmccn=(direct)|utmcmd=(none) """ class SimSimi: def __init__(self): self.session = requests.Session() self.chat_url = ( 'http://www.simsimi.com/func/reqN?lc=ch&ft=0.0&req={0}' '&fl=http%3A%2F%2Fwww.simsimi.com%2Ftalk.htm&reqType=' ) self.api_url = ('http://sandbox.api.simsimi.com/request.p?' 'key=%s&lc=ch&ft=1.0&text=%s') if not SIMSIMI_KEY: self.initSimSimiCookie() def initSimSimiCookie(self): self.session.headers.update( {'User-Agent': ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)' ' AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/43.0.2357.81 Safari/537.36')} ) self.session.get('http://www.simsimi.com/talk.htm') self.session.headers.update( {'Referer': 'http://www.simsimi.com/talk.htm'}) self.session.get('http://www.simsimi.com/talk.htm?lc=ch') self.session.headers.update( {'Referer': 'http://www.simsimi.com/talk.htm?lc=ch'}) self.session.headers.update( {'Accept': 'application/json, text/javascript, */*; q=0.01'}) self.session.headers.update({'Accept-Encoding': 'gzip, deflate, sdch'}) self.session.headers.update( {'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4'}) self.session.headers.update({'Cache-Control': 'no-cache'}) self.session.headers.update({'Connection': 'keep-alive'}) self.session.headers.update( {'Content-Type': 'application/json; charset=utf-8'}) self.session.headers.update({'Host': 'www.simsimi.com'}) self.session.headers.update({'Pragma': 'no-cache'}) self.session.headers.update({'X-Requested-With': 'XMLHttpRequest'}) self.session.headers.update( {'Cookie': COOKIE}) def getSimSimiResult(self, message, method='normal'): if method == 'normal': print self.chat_url.format(message) r = self.session.get(self.chat_url.format(message)) else: url = self.api_url % (SIMSIMI_KEY, message) r = requests.get(url) return r def chat(self, message=''): if message: r = self.getSimSimiResult( message, 'normal' if not SIMSIMI_KEY else 'api') try: answer = r.json()['response'].encode('utf-8') return answer except: return random.choice(['呵呵', '。。。', '= =', '=。=']) else: return '叫我干嘛' simsimi = SimSimi() def test(data): return True def handle(data): return simsimi.chat(data['message']), None if __name__ == '__main__': print handle({'message': '最后一个问题'}) print handle({'message': '还有一个问题'}) print handle({'message': '其实我有三个问题'}) ================================================ FILE: slack_bot/plugins/toutiao.py ================================================ # coding=utf-8 import requests from utils import datetime2timestamp, gen_attachment, trunc_utf8 CHANNEL_MAPS = { '推荐': '__all__', '热点': 'news_hot', '社会': 'news_society', '娱乐': 'news_entertainment', '科技': 'news_tech', '军事': 'news_military', '美食': 'news_food', '游戏': 'news_game', '体育': 'news_sports' } description = """ 今日头条。触发条件: "头条 [%s] [带图] [私聊]"。比如: * 头条 * 头条 娱乐 """ % ' | '.join(CHANNEL_MAPS.keys()) API = 'http://toutiao.com/api/article/recent/?source=2&count=20&category={0}&max_behot_time={1}&utm_source=toutiao&offset=0' # noqa def get_content(channel): category = CHANNEL_MAPS.get(channel) r = requests.get(API.format(category, datetime2timestamp())) data = r.json()['data'] for i in data: text = (u'<{seo_url}|{title}> 赞{bury_count} 踩{digg_count} - ' '{source} {datetime}').format(**i) image_url = i.get('middle_image', '') if isinstance(image_url, dict): image_url = image_url['url'] attach = gen_attachment(trunc_utf8(i['abstract']), image_url, image_type='thumb', title=i['title'], title_link=i['seo_url'], fallback=False) yield text, attach def test(data): return any(w in data['message'] for w in ['toutiao', '头条']) def handle(data): msg = data['message'].split() channel = '推荐' if len(msg) == 1 else msg[1].strip() if channel not in CHANNEL_MAPS: return '目前可选的频道包含: {}'.format('|'.join(CHANNEL_MAPS.keys())) ret = [r for r in get_content(channel)] return '\n'.join([r[0] for r in ret]), [r[1] for r in ret] if __name__ == '__main__': print handle({'message': '头条'}) ================================================ FILE: slack_bot/plugins/travel.py ================================================ # coding=utf-8 import re from flask import current_app from baidumap import travel_city, travel_attractions from weather import get_city from utils import chinese2digit, to_pinyin description = ''' 国内旅游推荐/景点介绍/X日游。触发条件: "xx旅游推荐|颐和园景点介绍|xx3(/三)日游"。比如: * 沈阳旅游推荐 * 景点介绍颐和园 * 颐和园景点介绍 * 北京3日游 ''' ATTRACTIONS_REGEX = re.compile(r'(.*?)景点介绍(.*?)') CITY_REGEX = re.compile(r'(旅游推荐)') DAYS_REGEX = re.compile(r'(.*)日游') def get_desc(regex, message): match = regex.search(message) if match: return next((m for m in match.groups() if m), None) def get_itinerary(res, details=False): if not res['itineraries']: return '没找到对应的行程' text = [] if details: text.append(res['description']) for i in res['itineraries']: text.append(u'类型: {0}: {1}'.format(i['name'], i['description'])) for index, it in enumerate(i['itineraries'], 1): text.append( u'第{}天 '.format(index) + u' ->'.join( [p['name'] for p in it['path']])) for t in ['description', 'dinning', 'accommodation']: text.append(it[t]) text.append('\n') return '\n'.join(text) def test(data): return get_city(data) and any([ regex.search(data['message']) for regex in [CITY_REGEX, DAYS_REGEX]]) \ or ATTRACTIONS_REGEX.search(data['message']) def handle(data): app = current_app if app is None: ak = '18691b8e4206238f331ad2e1ca88357e' else: ak = app.config.get('BAIDU_AK') message = data['message'] location = get_city(data) if location: message = message.replace(location.encode('utf-8'), '') days = get_desc(DAYS_REGEX, message) if days: if not isinstance(days, int): days = chinese2digit(days) res = travel_city(ak, location, days) return get_itinerary(res), None city = get_desc(CITY_REGEX, message) if city: res = travel_city(ak, location) return get_itinerary(res, details=True), None attractions = get_desc(ATTRACTIONS_REGEX, message) if attractions: return travel_attractions(ak, to_pinyin(attractions)), None return '没找到对应的旅游行程', None if __name__ == '__main__': print handle({'message': '北京三日游'}) print handle({'message': '北京旅游推荐'}) print handle({'message': '颐和园景点介绍'}) ================================================ FILE: slack_bot/plugins/utils.py ================================================ # coding=utf-8 import os import re import random import shutil import calendar from datetime import datetime from flask import current_app import pytz import requests from slacker import Slacker from pypinyin import lazy_pinyin from consts import ONE_DAY, COLORS CANVAS_REGEX = re.compile(r'base64,(.*)') def check_cache(cache, fn, *args, **kwargs): timeout = kwargs.get('timeout', ONE_DAY) return (cache.cached(timeout=timeout)(fn) if cache is not None else fn)(*args, **kwargs) def timestamp2str(timestamp, fmt='%H:%M:%S', timezone='Asia/Shanghai'): dt = datetime.utcfromtimestamp(float(timestamp)).replace(tzinfo=pytz.utc) tz = pytz.timezone(timezone) return tz.normalize(dt.astimezone(tz)).strftime(fmt) def datetime2timestamp(dt=None, timezone='Asia/Shanghai'): if dt is None: dt = datetime.now() tz = pytz.timezone(timezone) dt = dt.replace(tzinfo=pytz.utc).astimezone(tz) return calendar.timegm(dt.timetuple()) def check_time(dt=None, timezone='Asia/Shanghai'): if dt is None: dt = datetime.now() tz = pytz.timezone(timezone) dt = dt.replace(tzinfo=pytz.utc).astimezone(tz) return 'day' if 6 <= dt.hour <= 18 else 'night' def to_pinyin(word): if not isinstance(word, unicode): word = word.decode('utf-8') return ''.join(lazy_pinyin(word)) def chinese2digit(ch): try: return ['一', '二', '三', '四', '五', '六', '七', '八', '九'].index(ch) + 1 except ValueError: return ch def upload_image(canvas_or_url, image_type, app=None, filename=None, tmp_dir=None, deleted=False): here = os.path.abspath(os.path.dirname(__file__)) if tmp_dir is None: tmp_dir = os.path.join(here, 'data') match = CANVAS_REGEX.search(canvas_or_url) if match: imgstr = match.group(1) if filename is None: filename = os.path.join(tmp_dir, '{}.png'.format(imgstr[:20])) output = open(filename, 'wb') output.write(imgstr.decode('base64')) output.close() else: r = requests.get(canvas_or_url, stream=True) if filename is None: filename = canvas_or_url.rsplit('/', 1)[1] with open(filename, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) if image_type == 'thumb': image_type = 'thumb_360' if app is None: token = 'xoxp-4231087425-4231087427-4463321974-03a74ae' else: token = app.config.get('SLACK_CHAT_TOKEN') slack = Slacker(token) ret = slack.files.upload(filename) if deleted: os.remove(filename) try: return ret.body['file'][image_type] except KeyError: return ret.body['file']['url'] def check_canvas(image_url, image_type): match = CANVAS_REGEX.search(image_url) if match: return upload_image(image_url, image_type) else: return image_url def convert2unicode(s): if not isinstance(s, unicode): return s.decode('utf-8') return s def convert2str(s): if isinstance(s, unicode): return s.encode('utf-8') return s def gen_attachment(text, image_url='', image_type='url', title='', title_link='', color='random', fallback=True): if color == 'random': color = random.choice(COLORS) key = 'thumb_url' if image_type == 'thumb' else 'image_url' attachment = {'text': text, 'title_link': title_link, 'color': color, key: check_canvas(image_url, image_type), 'title': title} if fallback: attachment.update({ 'fallback': u'{0} {1}'.format( convert2unicode(title), convert2unicode(text)) }) return attachment def trunc_utf8(s, length=50): s = convert2unicode(s) if s > length: s = s[:length] + '...' return s def replaced(message, rep_words): for word in rep_words: message = message.replace(word, '', 1) return message ================================================ FILE: slack_bot/plugins/v2ex.py ================================================ # coding=utf-8 import cgi from datetime import datetime from lxml import etree import requests from slack_bot.ext import cache from consts import ONE_DAY, ONE_MINUTE NODES = ['linux', 'macosx', 'create', 'android', 'python', 'programmer', 'vim', 'jobs', 'react', 'beijing', 'redis', 'mongodb', 'tornado', 'emacs', 'django', 'flask', 'go', 'lisp'] TAGS = ['title', 'published', 'updated', 'content'] MAX_FEEDS_LEN = 50 FEED_URL = 'https://www.v2ex.com/feed/{0}.xml' TOPIC_URL = 'http://www.v2ex.com/t/{0}' NODE_URL = 'http://www.v2ex.com/go/{0}' NODE_KEY = 'v2ex:node:{0}' TOPIC_KEY = 'v2ex:topic:{0}' NODE_UPDATE_KEY = 'v2ex:update:{0}' # node 缓存时间根据发布topic频繁程度而不同 description = """ v2ex feed. 触发条件: "v2ex [%s] [私聊]". 比如: * v2ex * v2ex python """ % ' | '.join(NODES) def get_updated_interval(node_name, feeds, default=ONE_DAY): updated_times = [] for id in feeds: topic = cache.get(TOPIC_KEY.format(id)) if topic: updated_times.append(topic['updated']) else: print 'topic {} not cached!'.format(id) min = default for i in range(len(updated_times) - 1): sec = (updated_times[i] - updated_times[i + 1]).total_seconds() if sec < min: min = sec if min < ONE_MINUTE: min = ONE_MINUTE break return min def fetch2cache(node_name): print 'Fetch {}'.format(node_name) r = requests.get(FEED_URL.format(node_name), verify=False) root = etree.fromstring(r.text.encode('utf-8')) entries = root.findall('{http://www.w3.org/2005/Atom}entry') node_key = NODE_KEY.format(node_name) feeds = cache.get(node_key) or [] new_feeds = [] for entry in entries: topic = {} id = entry[2].text.rpartition('/')[-1] key = TOPIC_KEY.format(id) for el in entry: for tag in TAGS: if el.tag.endswith(tag): res = el.text if tag in ('published', 'updated'): res = datetime.strptime(res, '%Y-%m-%dT%H:%M:%SZ') topic[tag] = res topic['node'] = node_name cache.set(key, topic, ONE_DAY) new_feeds.append(id) if new_feeds: new_feeds += feeds[:MAX_FEEDS_LEN - len(new_feeds)] interval = get_updated_interval(node_name, new_feeds) cache.set(node_key, new_feeds, interval) def fetch(force=False): ids = set() for node in NODES: node_key = NODE_KEY.format(node) res = cache.get(node_key) if res and not force: ids.update(res) continue fetch2cache(node) ids.update(cache.get(node_key)) ids = list(set(ids)) def _key(id): topic = cache.get(TOPIC_KEY.format(id)) if not topic: return datetime(1970, 1, 1) return topic['published'] return sorted(ids, key=_key, reverse=True)[:MAX_FEEDS_LEN] def test(data): return data['message'].startswith('v2ex') def handle(data): message = data['message'] ids = fetch(force=(True if u'刷新' in message else False)) contents = [] for id in ids: topic = cache.get(TOPIC_KEY.format(id)) if not topic: continue node = topic['node'] msg = u'<{0}|{1} [{2}]> <{3}|{4}>'.format(TOPIC_URL.format(id), cgi.escape(topic['title']), topic['published'], NODE_URL.format(node), node) contents.append(msg) return '\n'.join(contents) if __name__ == '__main__': pass # 由于更换了cache引入方式,这里的测试暂不可用,如有需要在`python manager send v2ex` # from flask import Flask # from flask_cache import Cache # app = Flask(__name__) # cache = Cache() # cache.init_app(app, config={'CACHE_TYPE': 'simple'}) # with app.app_context(): # print handle({'message': 'v2ex'}) ================================================ FILE: slack_bot/plugins/weather.py ================================================ # coding=utf-8 # 天气 import os import re import cPickle as pickle from flask import current_app from baidumap import weather from utils import gen_attachment, check_time description = """ 今天的天气情况, 触发条件: "[城市名称] 天气 [私聊]"。比如: * 天气 * 上海天气 """ DAY = {0: u'今天', 1: u'明天', 2: u'后天'} TEMPERATURE_REGEX = re.compile(ur'(\d+)℃') def get_city(data): cityidDict = pickle.load(file( os.path.join(os.path.dirname(__file__), 'data' + os.path.sep + 'cityid'), 'r')) return next( (c for c in cityidDict if c.encode('utf8') in data['message']), False) def test(data): return '天气' in data['message'] and get_city(data) def handle(data): app = current_app if app is None: ak = '18691b8e4206238f331ad2e1ca88357e' else: ak = app.config.get('BAIDU_AK') city = get_city(data) if not city: return '不会自己去看天气预报啊' res = weather(ak, city)[:3] ret = [] attaches = [] for idx, day in enumerate(res): if idx == 0: current = TEMPERATURE_REGEX.search(day['date']).groups()[0] text = u'{0}: {1} {2} {3} 温度: {4}'.format( DAY[idx], current, day['weather'], day['wind'], day['temperature']) else: text = u'{0}: {1} {2} 温度: {3}'.format( DAY[idx], day['weather'], day['wind'], day['temperature']) ret.append(text) type = 'dayPictureUrl' if check_time() == 'day' else 'dayPictureUrl' attaches.append(gen_attachment(text, day[type], image_type='thumb', title=u'{}天气预报'.format(city), title_link='')) return '\n'.join(ret), attaches if __name__ == '__main__': print test({'message': '天气怎么样'}) print test({'message': '北京天气怎么样'}) print handle({'message': '北京天气怎么样'}) ================================================ FILE: slack_bot/plugins/wikipedia.py ================================================ # -*-coding:utf-8-*- """ Copyright (c) 2012 yangzhe1991 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ # 维基百科 from bs4 import BeautifulSoup import requests import re description = """ 维基百科。触发条件: "什么是 内容 [私聊]"。比如: * 什么是薛定谔方程啊 * 什么是CSS """ def test(data): return '什么是' in data['message'] def handle(data): m = re.search('(?<=什么是)(.+?)(?=啊|那|呢|哈|!|。|?|\?|\s|\Z)', data['message']) if m and m.groups(): return wikipedia(m.groups()[0]) raise Exception def wikipedia(title): r = requests.get('http://zh.wikipedia.org/wiki/{0}'.format(title), timeout=10) soup = BeautifulSoup(r.text) result = soup.find(id='mw-content-text').find('p').text return result if result else '我还不知道哎' if __name__ == '__main__': for message in ['什么是SVM ????', '什么是薛定谔方程啊', '什么是CSS?']: data = {'message': message} print message, test(data) if test(data): print handle(data) ================================================ FILE: slack_bot/settings.py ================================================ # coding=utf-8 # debug模式主要用在gunicorn启动的时候可能看到错误堆栈 DEBUG = True SECRET_KEY = 'o\xdd\x02I\x0b\xbbBP4\x97\xab\xe0GF\xfba\x14_\x03\xa9\xe8\xfa\xf8c' # noqa # clask chat token 注册地址: https://api.slack.com/web SLACK_CHAT_TOKEN = 'xoxp-4231087425-4231087427-4463321974-03a74a' # 你希望slack的outgoing-webhook调用你的回调的路由 SLACK_CALLBACK = '/slack_callback' # 使用Github-issue插件需要指定组织的地址 ORG_NAME = 'python-cn' # 百度地图api key, 注册地址: http://lbsyun.baidu.com/apiconsole/key BAIDU_AK = '18691b8e4206238f331ad2e1ca88357e' # simsim key, 注册地址: http://developer.simsimi.com/ SIMSIMI_KEY = '50c086cb-5ea3-4190-bdd6-69787a540ec4' # 大众点评应用, 注册地址: http://developer.dianping.com/dashboard/info/app DIANPING_APPKEY = '41502445' DIANPING_SECRET = 'f0c2cc0b4f1048bebffc1527acbaeeb8' # Flask-cache的类型, 默认为SimpleCache CACHE_TYPE = 'simple' # 假如使用RedisCache, 也就是CACHE_TYPE = 'redis'需要配置CACHE_REDIS_URL CACHE_REDIS_URL = 'redis://user:password@localhost:6379/0' # 使用`python manage.py send`时候的模拟数据 TEST_DATA = { 'token': 'jLGMzrZn3P1lS2sD848KpPuN', 'text': 'text', 'team_id': 'T0001', 'team_domain': 'example', 'channel_id': 'C2147483705', 'channel_name': 'channel_name', 'timestamp': '1355517523', 'user_id': 'U2147483697', 'user_name': 'Steve', 'trigger_word': '', } try: from local_settings import * # noqa except ImportError: print('You may need rename local_settings.py.example ' 'to local_settings.py, then update your settings') ================================================ FILE: slack_bot/utils.py ================================================ #!/usr/bin/env python # -*- coding: utf-8 -*- from multiprocessing import TimeoutError from multiprocessing.pool import ThreadPool from functools import wraps def timeout(seconds, default="timeout"): def decorator(fn): @wraps(fn) def wrapper(*args, **kwargs): pool = ThreadPool(processes=1) async_result = pool.apply_async(fn, args=args, kwds=kwargs) try: return async_result.get(seconds) except TimeoutError: if callable(default): return default() return default return wrapper return decorator ================================================ FILE: wsgi.py ================================================ # coding=utf-8 from slack_bot.app import create_app app = create_app()