diff --git a/.gitignore b/.gitignore index 22a3c02..ddb9830 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ data-dev.db .env #Dockerfile .dockerignore -# google_analytics.py \ No newline at end of file +# google_analytics.py +.deta \ No newline at end of file diff --git a/Dockerfile.old b/Dockerfile.old deleted file mode 100644 index f0d54e9..0000000 --- a/Dockerfile.old +++ /dev/null @@ -1,32 +0,0 @@ -# 使用基础镜像库 -FROM alpine:3.8 -RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.7/main/ > /etc/apk/repositories - -RUN apk add --no-cache vim nginx python3 uwsgi uwsgi-python3 -RUN apk add --update --upgrade -RUN apk add --no-cache nginx python3 uwsgi uwsgi-python3 -RUN pip3 install --no-cache-dir --upgrade pip -RUN ln -s /usr/bin/python3 /usr/bin/python - - - -# 创建工作路径 -RUN mkdir /app - -# 指定容器启动时执行的命令都在app目录下执行 -WORKDIR /app - -# 替换nginx的配置 -COPY nginx.conf /etc/nginx/nginx.conf - -# 将本地目录下的内容拷贝到容器的app目录下 -COPY . /app/ - -RUN apk update -RUN apk add --no-cache gcc musl-dev libxml2 libxslt-dev -# pip读取requirements.txt内容安装所需的库 -RUN pip install -r /app/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package --no-cache-dir - -# 启动nginx和uwsgi -# ENTRYPOINT nginx -g "daemon on;" && uwsgi --ini /app/uwsgi.ini -ENTRYPOINT nginx -g "daemon on;" && gunicorn -w 4 wsgi:app \ No newline at end of file diff --git a/Procfile b/Procfile deleted file mode 100644 index fc272ab..0000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: gunicorn wsgi:app \ No newline at end of file diff --git a/README.md b/README.md index 6899397..7bb1e77 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ RSSHub 是一个轻量、易于扩展的 RSS 生成器,可以给任何奇奇 **其实用Python写爬虫要比JS更方便:p** -DEMO地址:https://pyrsshub.herokuapp.com +DEMO地址:https://rsshub.deta.dev ## RSS过滤 @@ -20,7 +20,7 @@ DEMO地址:https://pyrsshub.herokuapp.com - exclude_description: 排除描述 - limit: 限制条数 -## 贡献RSS方法 +## 贡献 RSS 方法 1. fork这份仓库 2. 在spiders文件夹下创建新的爬虫目录和脚本,编写爬虫,参考我的[爬虫教程](https://alphardex.github.io/2018/12/15/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB%E7%B2%BE%E8%A6%81/) @@ -30,7 +30,7 @@ DEMO地址:https://pyrsshub.herokuapp.com ## 部署 -### 搭建 +### 本地测试 首先确保安装了[pipenv](https://github.com/pypa/pipenv) @@ -39,22 +39,29 @@ git clone https://github.com/alphardex/RSSHub-python cd RSSHub-python pipenv install --dev pipenv shell -``` - -### 运行 - -``` bash flask run ``` -### 部署到Heroku +### 生产环境 -[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/hillerliao/RSSHub-python) +``` bash +gunicorn main:app -b 0.0.0.0:5000 +``` -记得在环境变量中把FLASK_CONFIG设为production +### 部署到 deta.dev + +[![Deploy](https://button.deta.dev/1/svg)](https://go.deta.dev/deploy?repo=https://github.com/hillerliao/rsshub-python) + +安装 [Deta CLI](https://docs.deta.sh/docs/cli/install/); +在终端运行`deta login`; +在项目根目录运行`deta new --python pyrsshub`; +将 `pyrsshub` 目录下的 `.deta` 文件夹移到根目录; +运行`deta deploy`; +获取网址 `https://.deta.dev/`; +更新`deta update` ### Docker 部署 -制作镜像文件 `docker image build -t rsshub_python .` +制作镜像文件 `docker build -t pyrsshub:latest .` -创建docker容器 `docker run -dit -p 6666:6666 --name rsshub rsshub_python` +创建docker容器 `docker run -dit --name pyrsshub -p 8080:80 pyrsshub:latest` \ No newline at end of file diff --git a/gunicorn.conf b/gunicorn.conf index 2192079..d01649f 100644 --- a/gunicorn.conf +++ b/gunicorn.conf @@ -1,3 +1,3 @@ [program:gunicorn] -command=/usr/local/bin/gunicorn wsgi:app -b localhost:5000 +command=/usr/local/bin/gunicorn main:app -b localhost:5000 directory=/app \ No newline at end of file diff --git a/wsgi.py b/main.py similarity index 100% rename from wsgi.py rename to main.py diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 3a6ec65..0000000 --- a/nginx.conf +++ /dev/null @@ -1,51 +0,0 @@ -user nginx; -worker_processes 1; -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; -worker_rlimit_nofile 20480; - - -events { - use epoll; - worker_connections 20480; - multi_accept on; -} - - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - #请求量级大建议关闭acccess_log - #access_log /var/log/nginx/access.log main; - - sendfile on; - #tcp_nopush on; - - keepalive_timeout 300s; - client_header_timeout 300s; - client_body_timeout 300s; - - gzip on; - gzip_min_length 1k; - gzip_buffers 4 16k; - gzip_types text/html application/javascript application/json; - - include /etc/nginx/conf.d/*.conf; - - server { - listen 6666; - charset utf-8; - client_max_body_size 75M; - location / { - include uwsgi_params; - uwsgi_pass unix:///tmp/uwsgi.sock; - uwsgi_send_timeout 300; - uwsgi_connect_timeout 300; - uwsgi_read_timeout 300; - } - } -} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 2d49328..a4d7f5d 100644 Binary files a/requirements.txt and b/requirements.txt differ diff --git a/rsshub/blueprints/main.py b/rsshub/blueprints/main.py index 8d8cb74..e0283a2 100644 --- a/rsshub/blueprints/main.py +++ b/rsshub/blueprints/main.py @@ -1,216 +1,225 @@ -from flask import Blueprint, render_template, request - -bp = Blueprint('main', __name__) - -@bp.route('/') -def word(): - from rsshub.spiders.word.word import ctx - return render_template('main/word.html', **ctx()) - -@bp.route('/index') -def index(): - return render_template('main/index.html') - -@bp.route('/feeds') -def feeds(): - return render_template('main/feeds.html') - - -@bp.app_template_global() -def filter_content(ctx): - include_title = request.args.get('include_title') - include_description = request.args.get('include_description') - exclude_title = request.args.get('exclude_title') - exclude_description = request.args.get('exclude_description') - limit = request.args.get('limit', type=int) - items = ctx['items'].copy() - items = [item for item in items if include_title in item['title']] if include_title else items - items = [item for item in items if include_description in item['description']] if include_description else items - items = [item for item in items if exclude_title not in item['title']] if exclude_title else items - items = [item for item in items if exclude_description not in item['description']] if exclude_description else items - items = items[:limit] if limit else items - ctx = ctx.copy() - ctx['items'] = items - return ctx - - - -#---------- feed路由从这里开始 -----------# -@bp.route('/cninfo/announcement//') -@bp.route('/cninfo/announcement') -def cninfo_announcement(stock_id='', category=''): - from rsshub.spiders.cninfo.announcement import ctx - return render_template('main/atom.xml', **filter_content(ctx(stock_id,category))) - - -@bp.route('/chuansongme/articles/') -@bp.route('/chuansongme/articles') -def chuansongme_articles(category=''): - from rsshub.spiders.chuansongme.articles import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - - -@bp.route('/ctolib/topics/') -@bp.route('/ctolib/topics') -def ctolib_topics(category=''): - from rsshub.spiders.ctolib.topics import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - - -@bp.route('/infoq/recommend') -def infoq_recommend(): - from rsshub.spiders.infoq.recommend import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - - -@bp.route('/infoq/topic/') -def infoq_topic(category=''): - from rsshub.spiders.infoq.topic import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - - -@bp.route('/dxzg/notice') -def dxzg_notice(): - from rsshub.spiders.dxzg.notice import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - - -@bp.route('/earningsdate/prnewswire') -def earningsdate_prnewswire(): - from rsshub.spiders.earningsdate.prnewswire import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/earningsdate/globenewswire') -def earningsdate_globenewswire(): - from rsshub.spiders.earningsdate.globenewswire import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/earningsdate/businesswire') -def earningsdate_businesswire(): - from rsshub.spiders.earningsdate.businesswire import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/jiemian/newsflash/') -def jiemian_newsflash(category=''): - from rsshub.spiders.jiemian.newsflash import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/csrc/audit/') -def csrc_audit(category=''): - from rsshub.spiders.csrc.audit import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/caixin/scroll/') -def caixin_scroll(category=''): - from rsshub.spiders.caixin.scroll import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/eastmoney/report//') -def eastmoney_report(category='', type=''): - from rsshub.spiders.eastmoney.report import ctx - return render_template('main/atom.xml', **filter_content(ctx(type,category))) - -@bp.route('/xuangubao//') -def xuangubao_xuangubao(type='', category=''): - from rsshub.spiders.xuangubao.xuangubao import ctx - return render_template('main/atom.xml', **filter_content(ctx(type, category))) - -@bp.route('/cls/subject/') -def cls_subject(category=''): - from rsshub.spiders.cls.subject import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/cls/telegraph/') -def cls_telegraph(): - from rsshub.spiders.cls.telegraph import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/chaindd/column/') -def chaindd_column(category=''): - from rsshub.spiders.chaindd.column import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/techcrunch/tag/') -def techcrunch_tag(category=''): - from rsshub.spiders.techcrunch.tag import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/weiyangx/home') -def weiyangx_home(): - from rsshub.spiders.weiyangx.home import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/weiyangx/express/') -def weiyangx_express(): - from rsshub.spiders.weiyangx.express import ctx - return render_template('main/atom.xml', **filter_content(ctx())) - -@bp.route('/weiyangx/tag/') -def weiyangx_tag(category=''): - from rsshub.spiders.weiyangx.tag import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/jintiankansha/column/') -def jintiankansha_column(category=''): - from rsshub.spiders.jintiankansha.column import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/interotc/cpgg/') -def interotc_cpgg(category=''): - from rsshub.spiders.interotc.cpgg import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/benzinga/ratings/') -def benzinga_ratings(category=''): - from rsshub.spiders.benzinga.ratings import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/chouti/section/') -def chouti_section(category=''): - from rsshub.spiders.chouti.section import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/chouti/search/') -def chouti_search(category=''): - from rsshub.spiders.chouti.search import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/chouti/user/') -def chouti_user(category=''): - from rsshub.spiders.chouti.user import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/zaobao/realtime/') -def zaobao_realtime(category=''): - from rsshub.spiders.zaobao.realtime import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/mp/tag//') -def mp_tag(mp='', tag=''): - from rsshub.spiders.mp.tag import ctx - return render_template('main/atom.xml', **filter_content(ctx(mp,tag))) - -@bp.route('/producthunt/search//') -def producthunt_search(keyword='', period=''): - from rsshub.spiders.producthunt.search import ctx - return render_template('main/atom.xml', **filter_content(ctx(keyword,period))) - -@bp.route('/pgyer/') -def pgyer_app(category=''): - from rsshub.spiders.pgyer.app import ctx - return render_template('main/atom.xml', **filter_content(ctx(category))) - -@bp.route('/mp/gh/') -def mp_gh(gh=''): - from rsshub.spiders.mp.gh import ctx - return render_template('main/atom.xml', **filter_content(ctx(gh))) - -@bp.route('/mp/youwuqiong/') -def mp_youwuqiong(author=''): - from rsshub.spiders.mp.youwuqiong import ctx - return render_template('main/atom.xml', **filter_content(ctx(author))) - -@bp.route('/yfchuhai/express/') -def yfchuhai_express(): - from rsshub.spiders.yfchuhai.express import ctx - return render_template('main/atom.xml', **filter_content(ctx())) \ No newline at end of file +from flask import Blueprint, render_template, request + +bp = Blueprint('main', __name__) + +@bp.route('/') +def word(): + from rsshub.spiders.word.word import ctx + return render_template('main/word.html', **ctx()) + +@bp.route('/index') +def index(): + return render_template('main/index.html') + +@bp.route('/feeds') +def feeds(): + return render_template('main/feeds.html') + + +@bp.app_template_global() +def filter_content(ctx): + include_title = request.args.get('include_title') + include_description = request.args.get('include_description') + exclude_title = request.args.get('exclude_title') + exclude_description = request.args.get('exclude_description') + limit = request.args.get('limit', type=int) + items = ctx['items'].copy() + items = [item for item in items if include_title in item['title']] if include_title else items + items = [item for item in items if include_description in item['description']] if include_description else items + items = [item for item in items if exclude_title not in item['title']] if exclude_title else items + items = [item for item in items if exclude_description not in item['description']] if exclude_description else items + items = items[:limit] if limit else items + ctx = ctx.copy() + ctx['items'] = items + return ctx + + + +#---------- feed路由从这里开始 -----------# +@bp.route('/cninfo/announcement//') +@bp.route('/cninfo/announcement') +def cninfo_announcement(stock_id='', category=''): + from rsshub.spiders.cninfo.announcement import ctx + return render_template('main/atom.xml', **filter_content(ctx(stock_id,category))) + + +@bp.route('/chuansongme/articles/') +@bp.route('/chuansongme/articles') +def chuansongme_articles(category=''): + from rsshub.spiders.chuansongme.articles import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + + +@bp.route('/ctolib/topics/') +@bp.route('/ctolib/topics') +def ctolib_topics(category=''): + from rsshub.spiders.ctolib.topics import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + + +@bp.route('/infoq/recommend') +def infoq_recommend(): + from rsshub.spiders.infoq.recommend import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + + +@bp.route('/infoq/topic/') +def infoq_topic(category=''): + from rsshub.spiders.infoq.topic import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + + +@bp.route('/dxzg/notice') +def dxzg_notice(): + from rsshub.spiders.dxzg.notice import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + + +@bp.route('/earningsdate/prnewswire') +def earningsdate_prnewswire(): + from rsshub.spiders.earningsdate.prnewswire import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/earningsdate/globenewswire') +def earningsdate_globenewswire(): + from rsshub.spiders.earningsdate.globenewswire import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/earningsdate/businesswire') +def earningsdate_businesswire(): + from rsshub.spiders.earningsdate.businesswire import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/jiemian/newsflash/') +def jiemian_newsflash(category=''): + from rsshub.spiders.jiemian.newsflash import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/csrc/audit/') +def csrc_audit(category=''): + from rsshub.spiders.csrc.audit import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/caixin/scroll/') +def caixin_scroll(category=''): + from rsshub.spiders.caixin.scroll import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/eastmoney/report//') +def eastmoney_report(category='', type=''): + from rsshub.spiders.eastmoney.report import ctx + return render_template('main/atom.xml', **filter_content(ctx(type,category))) + +@bp.route('/xuangubao//') +def xuangubao_xuangubao(type='', category=''): + from rsshub.spiders.xuangubao.xuangubao import ctx + return render_template('main/atom.xml', **filter_content(ctx(type, category))) + +@bp.route('/cls/subject/') +def cls_subject(category=''): + from rsshub.spiders.cls.subject import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/cls/telegraph/') +def cls_telegraph(): + from rsshub.spiders.cls.telegraph import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/chaindd/column/') +def chaindd_column(category=''): + from rsshub.spiders.chaindd.column import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/techcrunch/tag/') +def techcrunch_tag(category=''): + from rsshub.spiders.techcrunch.tag import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/weiyangx/home') +def weiyangx_home(): + from rsshub.spiders.weiyangx.home import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/weiyangx/express/') +def weiyangx_express(): + from rsshub.spiders.weiyangx.express import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +@bp.route('/weiyangx/tag/') +def weiyangx_tag(category=''): + from rsshub.spiders.weiyangx.tag import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/jintiankansha/column/') +def jintiankansha_column(category=''): + from rsshub.spiders.jintiankansha.column import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/interotc/cpgg/') +def interotc_cpgg(category=''): + from rsshub.spiders.interotc.cpgg import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/benzinga/ratings/') +def benzinga_ratings(category=''): + from rsshub.spiders.benzinga.ratings import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/chouti/section/') +def chouti_section(category=''): + from rsshub.spiders.chouti.section import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/chouti/search/') +def chouti_search(category=''): + from rsshub.spiders.chouti.search import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/chouti/user/') +def chouti_user(category=''): + from rsshub.spiders.chouti.user import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/zaobao/realtime/') +def zaobao_realtime(category=''): + from rsshub.spiders.zaobao.realtime import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/mp/tag//') +def mp_tag(mp='', tag=''): + from rsshub.spiders.mp.tag import ctx + return render_template('main/atom.xml', **filter_content(ctx(mp,tag))) + +@bp.route('/producthunt/search//') +def producthunt_search(keyword='', period=''): + from rsshub.spiders.producthunt.search import ctx + return render_template('main/atom.xml', **filter_content(ctx(keyword,period))) + +@bp.route('/pgyer/') +def pgyer_app(category=''): + from rsshub.spiders.pgyer.app import ctx + return render_template('main/atom.xml', **filter_content(ctx(category))) + +@bp.route('/mp/gh/') +def mp_gh(gh=''): + from rsshub.spiders.mp.gh import ctx + return render_template('main/atom.xml', **filter_content(ctx(gh))) + +@bp.route('/mp/youwuqiong/') +def mp_youwuqiong(author=''): + from rsshub.spiders.mp.youwuqiong import ctx + return render_template('main/atom.xml', **filter_content(ctx(author))) + +@bp.route('/yfchuhai/express/') +def yfchuhai_express(): + from rsshub.spiders.yfchuhai.express import ctx + return render_template('main/atom.xml', **filter_content(ctx())) + +''' +@bp.route('/test') +@bp.route('/test/测试') +def test(): + import sys + # return sys.getdefaultencoding() + return sys.stdout.encoding +''' \ No newline at end of file diff --git a/rsshub/templates/main/feeds.html b/rsshub/templates/main/feeds.html index b3ed135..ed07566 100644 --- a/rsshub/templates/main/feeds.html +++ b/rsshub/templates/main/feeds.html @@ -1,9 +1,9 @@ {% extends "layout.html" %} {% block title %}All Feeds{% endblock title %} {% block content %}
-

传送门

+

传送门-失效

文章 by alphardex
-

举例:https://pyrsshub.herokuapp.com/chuansongme/articles

+

举例:https://rsshub.deta.dev/chuansongme/articles

路由:/chuansongme/articles/:category

参数:category [默认为“最新”]

@@ -27,9 +27,9 @@
-

CTOLib

+

CTOLib-失效

话题 by alphardex
-

举例:https://pyrsshub.herokuapp.com/ctolib/topics

+

举例:https://rsshub.deta.dev/ctolib/topics

路由:/ctolib/topics/:category

参数:category [默认为“默认排序”]

@@ -55,11 +55,11 @@

InfoQ

推荐内容 by alphardex hillerliao
-

举例:https://pyrsshub.herokuapp.com/infoq/recommend

+

举例:https://rsshub.deta.dev/infoq/recommend

路由:/infoq/recommend

主题内容 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/infoq/topic/159

+

举例:https://rsshub.deta.dev/infoq/topic/159

路由:/infoq/topic/:category

@@ -68,8 +68,8 @@

巨潮资讯

公司公告 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/cninfo/announcement/all/gqjl

-

举例:https://pyrsshub.herokuapp.com/cninfo/announcement/all/gqbd_预披露,股权变动类公告中标题含有「预披露」的公告

+

举例:https://rsshub.deta.dev/cninfo/announcement/all/gqjl

+

举例:https://rsshub.deta.dev/cninfo/announcement/all/gqbd_预披露,股权变动类公告中标题含有「预披露」的公告

路由:/cninfo/announcement/:stock_id/:category

@@ -79,7 +79,7 @@

东兴资管

产品公告 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/dxzg/notice

+

举例:https://rsshub.deta.dev/dxzg/notice

路由:/dxzg/notice

@@ -91,7 +91,7 @@

Earnings Date

Earnings Date by hillerliao
-

举例:https://pyrsshub.herokuapp.com/earningsdate/businesswire

+

举例:https://rsshub.deta.dev/earningsdate/businesswire

路由:/earningsdate/:category

参数:category [必填,可以为“businesswire、globenewswire、prnewswire”]

@@ -104,7 +104,7 @@

界面快讯

界面快讯 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/jiemian/newsflash/166

+

举例:https://rsshub.deta.dev/jiemian/newsflash/166

路由:/jiemian/newsflash/:category

参数:category [必填,见界面快讯栏目https://www.jiemian.com/lists/4.html]

@@ -117,7 +117,7 @@

证监会审核进度

证监会审核进度 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/csrc/audit/a1d50077cd7f4b15bd1c8d6163f32850

+

举例:https://rsshub.deta.dev/csrc/audit/a1d50077cd7f4b15bd1c8d6163f32850

路由:/csrc/audit/:category

参数:category [必填,见证监会栏目 https://neris.csrc.gov.cn/alappl/home/gongshi]

@@ -130,7 +130,7 @@

财新网滚动新闻

财新网滚动新闻 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/caixin/scroll/125

+

举例:https://rsshub.deta.dev/caixin/scroll/125

路由:/caixin/scroll/:category

参数:category [必填,见财新网滚动频道 http://www.caixin.com/search/scroll/0.jsp]

@@ -143,7 +143,7 @@

东方财富网行业/个股研报

东方财富网行业/个股研报 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/eastmoney/report/stock/473

+

举例:https://rsshub.deta.dev/eastmoney/report/stock/473

路由:/eastmoney/report/:type/:category

参数:type, category [必填,见财新网滚动频道 http://www.caixin.com/search/scroll/0.jsp]

@@ -156,7 +156,7 @@

选股宝板块/主题动态

选股宝板块/主题动态 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/xuangubao/theme/17006066

+

举例:https://rsshub.deta.dev/xuangubao/theme/17006066

路由:/xuangubao/:type/:category

参数:type = theme|subject, category [必填,板块/主题ID]

@@ -169,7 +169,7 @@

财联社主题动态

财联社主题动态 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/cls/subject/1345

+

举例:https://rsshub.deta.dev/cls/subject/1345

路由:/cls/subject/:category

参数:category [必填,见财联社APP主题栏目]

@@ -182,7 +182,7 @@

财联社电报

财联社电报 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/cls/telegraph

+

举例:https://rsshub.deta.dev/cls/telegraph

路由:/cls/telegraph

@@ -194,7 +194,7 @@

链得得栏目动态

链得得栏目动态 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/chaindd/column/3158465

+

举例:https://rsshub.deta.dev/chaindd/column/3158465

路由:/chaindd/column/:category

参数:category [必填,见链得得栏目url中的数字编号]

@@ -207,7 +207,7 @@

早报网 即时新闻文章列表

早报网 即时新闻文章列表 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/zaobao/realtime/china

+

举例:https://rsshub.deta.dev/zaobao/realtime/china

路由:/zaobao/realtime/:category

参数:category [必填,见 早报网 官网]

@@ -220,7 +220,7 @@

Techcrunch tag文章列表

Techcrunch tag文章列表 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/techcrunch/tag/216504

+

举例:https://rsshub.deta.dev/techcrunch/tag/216504

路由:/techcrunch/tag/:category

参数:category [必填,见 techcrunch 官网]

@@ -233,7 +233,7 @@

未央网-首页

未央网-首页 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/weiyangx/home/

+

举例:https://rsshub.deta.dev/weiyangx/home/

路由:/weiyangx/home/

@@ -245,7 +245,7 @@

未央网-国际快讯

未央网-国际快讯 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/weiyangx/express/

+

举例:https://rsshub.deta.dev/weiyangx/express/

路由:/weiyangx/express/

@@ -257,7 +257,7 @@

扬帆出海-快讯

扬帆出海-快讯 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/yfchuhai/express/

+

举例:https://rsshub.deta.dev/yfchuhai/express/

路由:/yfchuhai/express/

@@ -269,7 +269,7 @@

未央网 tag文章列表

未央网 tag文章列表 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/weiyangx/tag/金融科技

+

举例:https://rsshub.deta.dev/weiyangx/tag/金融科技

路由:/weiyangx/tag/:category

参数:category [必填,见 weiyangx 官网]

@@ -282,7 +282,7 @@

今天看啥专栏文章列表

今天看啥专栏文章列表 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/jintiankansha/column/KgkNwnDrsy

+

举例:https://rsshub.deta.dev/jintiankansha/column/KgkNwnDrsy

路由:/jintiankansha/column/:category

参数:category [必填,见 jintiankansha.me]

@@ -295,7 +295,7 @@

产品公告 - 机构间市场

产品公告 - 机构间市场 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/interotc/cpgg/东兴证券

+

举例:https://rsshub.deta.dev/interotc/cpgg/东兴证券

路由:/interotc/cpgg/:category

参数:category [必填,标题中的关键词]

@@ -308,7 +308,7 @@

股票评级 - Benzinga

股票评级 - Benzinga by hillerliao
-

举例:https://pyrsshub.herokuapp.com/benzinga/ratings/wb

+

举例:https://rsshub.deta.dev/benzinga/ratings/wb

路由:/benzinga/ratings/:category

参数:category [必填, 股票代码]

@@ -321,7 +321,7 @@

抽屉新热榜 - 用户

抽屉新热榜 - 用户 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/chouti/user/61675332140

+

举例:https://rsshub.deta.dev/chouti/user/61675332140

路由:/chouti/user/:category

参数:category [必填, 用户id]

@@ -334,7 +334,7 @@

抽屉新热榜 - 话题

抽屉新热榜 - 话题 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/chouti/section/1116

+

举例:https://rsshub.deta.dev/chouti/section/1116

路由:/chouti/section/:category

参数:category [必填, 话题id]

@@ -347,7 +347,7 @@

抽屉新热榜 - 搜索

抽屉新热榜 - 搜索 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/chouti/search/China

+

举例:https://rsshub.deta.dev/chouti/search/China

路由:/chouti/search/:category

参数:category [必填, 搜索关键词]

@@ -360,7 +360,7 @@

微信公众号 - 标签文章列表

微信公众号 - 标签文章列表 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/mp/tag/MzI5MjM3OTA0MA/1500461858015772673

+

举例:https://rsshub.deta.dev/mp/tag/MzI5MjM3OTA0MA/1500461858015772673

路由:/mp/tag/:biz/:tag

biz [必填, 公众号id],tag,[必填, 标签 id]

@@ -373,7 +373,7 @@

Producthunt - 搜索结果

Producthunt - 搜索结果 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/producthunt/search/wechat/30

+

举例:https://rsshub.deta.dev/producthunt/search/wechat/30

路由:/producthunt/search/:keyword/:period

keyword [必填, 搜索关键词],period,[必填, 时间范围]

@@ -386,7 +386,7 @@

蒲公英 - App 更新日志

蒲公英 - App 更新日志by hillerliao
-

举例:https://pyrsshub.herokuapp.com/pgyer/22bY

+

举例:https://rsshub.deta.dev/pgyer/22bY

路由:/pgyer/:pageid

pageid [必填, 页面 id]

@@ -399,7 +399,7 @@

微信公众号 - 最新文章 - 搜狗方案

微信公众号 - 最新文章 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/mp/gh/mao-talk

+

举例:https://rsshub.deta.dev/mp/gh/mao-talk

路由:/mp/tag/:biz/:tag

gh [必填, 公众号id]

@@ -412,7 +412,7 @@

微信公众号 - 最新文章 - 游无穷

微信公众号 - 最新文章 by hillerliao
-

举例:https://pyrsshub.herokuapp.com/mp/youwuqiong/maoyouhuashuo

+

举例:https://rsshub.deta.dev/mp/youwuqiong/maoyouhuashuo

路由:/mp/youwuqiong/:author

author [必填, 作者id,在 youwuqiong.com 文章列表页上找]

diff --git a/uwsgi.ini b/uwsgi.ini deleted file mode 100644 index c52b09f..0000000 --- a/uwsgi.ini +++ /dev/null @@ -1,10 +0,0 @@ -[uwsgi] -uwsgi-socket = /tmp/uwsgi.sock -chmod-socket = 777 -callable = app -plugin = python3 -wsgi-file = wsgi.py -buffer-size = 65535 -processes = %(%k * 2) -threads = %(%k * 20) -disable-logging = true \ No newline at end of file