Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python APScheduler是否需要一个函数才能运行?_Python_Apscheduler - Fatal编程技术网

Python APScheduler是否需要一个函数才能运行?

Python APScheduler是否需要一个函数才能运行?,python,apscheduler,Python,Apscheduler,我对编码是新手,这是我的第一个项目。到目前为止,我已经通过谷歌搜索、教程和堆栈拼凑了我所拥有的 我正在尝试将从一组已删除的RSS提要中添加的数据添加到远程sql数据库中,然后将脚本托管在heroku或AWS上,并让脚本每小时运行一次 我使用ApsScheduler的人 不过我很挣扎,因为ApsScheduler周围没有任何“傻瓜”教程。这就是我到目前为止所创造的 我想我的问题是,我的脚本是否需要在APScheduler触发它的函数中,或者它是否可以以另一种方式工作 from apschedule

我对编码是新手,这是我的第一个项目。到目前为止,我已经通过谷歌搜索、教程和堆栈拼凑了我所拥有的

我正在尝试将从一组已删除的RSS提要中添加的数据添加到远程sql数据库中,然后将脚本托管在heroku或AWS上,并让脚本每小时运行一次

我使用ApsScheduler的人

不过我很挣扎,因为ApsScheduler周围没有任何“傻瓜”教程。这就是我到目前为止所创造的

我想我的问题是,我的脚本是否需要在APScheduler触发它的函数中,或者它是否可以以另一种方式工作

from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=1)

sched.configure()
sched.start()

import pandas as pd
from pandas.io import sql
import feedparser
import time


rawrss = ['http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
          'https://www.yahoo.com/news/rss/',
          'http://www.huffingtonpost.co.uk/feeds/index.xml',
          'http://feeds.feedburner.com/TechCrunch/',
          'https://www.uktech.news/feed'
         ]

time = time.strftime('%a %H:%M:%S')
summary = 'text'

posts = []
for url in rawrss:
    feed = feedparser.parse(url)
    for post in feed.entries:
        posts.append((time, post.title, post.link, summary))

df = pd.DataFrame(posts, columns=['article_time','article_title','article_url', 'article_summary']) # pass data to init
df.set_index(['article_time'], inplace=True)

import pymysql
from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://<username>:<host>:3306/<database_name>?charset=utf8', encoding = 'utf-8')
engine.execute("INSERT INTO rsstracker VALUES('%s', '%s', '%s','%s')" % (time, post.title, post.link, summary))

df.to_sql(con=engine, name='rsstracker', if_exists='append') #, flavor='mysql'
来自apscheduler.schedulers.blocking import BlockingScheduler
sched=阻塞调度程序()
@计划作业('间隔',分钟=1)
sched.configure()
附表开始()
作为pd进口熊猫
从pandas.io导入sql
导入feedparser
导入时间
rawrss=['http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
'https://www.yahoo.com/news/rss/',
'http://www.huffingtonpost.co.uk/feeds/index.xml',
'http://feeds.feedburner.com/TechCrunch/',
'https://www.uktech.news/feed'
]
time=time.strftime(“%a%H:%M:%S”)
摘要='text'
职位=[]
对于rawrss中的url:
feed=feedparser.parse(url)
对于在feed.entries中发布的内容:
posts.append((时间、post.title、post.link、摘要))
df=pd.DataFrame(posts,columns=['article\u time','article\u title','article\u url','article\u summary'])将数据传递给init
df.set_索引(['article_time'],inplace=True)
导入pymysql
从sqlalchemy导入创建引擎
engine=create_engine('mysql+pymysql://::3306/?charset=utf8',编码='utf-8')
engine.execute(“插入rsstracker值('%s','%s','%s','%s')”)”%(时间,post.title,post.link,摘要))
to_sql(con=engine,name='rsstracker',如果_exists='append')#,flavor='mysql'

是。您想要执行的必须是一个函数(或另一个可调用的函数,如方法)。decorator语法(
@sched….
)需要应用decorator的函数定义(
def…
)。示例中的代码无法编译

然后它是一个阻塞调度程序,这意味着如果调用
sched.start()
此方法不会返回(除非在某些计划代码中停止调度程序),并且在执行调用后不会返回任何内容

导入应该位于顶部,这样就更容易看到模块所依赖的内容。不要进口你实际上不用的东西

我不知道为什么要导入并使用
pandas
来处理实际上不需要
DataFrame
对象的数据。另外,SQLAlchemy没有实际使用此库提供的任何内容,也没有将值格式化为字符串到SQL查询中

仅对数据库使用SQLAlchemy,它可能如下所示:

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
from time import strftime

import feedparser
from apscheduler.schedulers.blocking import BlockingScheduler
from sqlalchemy import create_engine, MetaData

sched = BlockingScheduler()


RSS_URLS = [
    'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
    'https://www.yahoo.com/news/rss/',
    'http://www.huffingtonpost.co.uk/feeds/index.xml',
    'http://feeds.feedburner.com/TechCrunch/',
    'https://www.uktech.news/feed',
]


@sched.scheduled_job('interval', minutes=1)
def process_feeds():
    time = strftime('%a %H:%M:%S')
    summary = 'text'

    engine = create_engine(
        'mysql+pymysql://<username>:<host>:3306/<database_name>?charset=utf8'
    )
    metadata = MetaData(engine, reflect=True)
    rsstracker = metadata.tables['rsstracker']

    for url in RSS_URLS:
        feed = feedparser.parse(url)
        for post in feed.entries:
            (
                rsstracker.insert()
                    .values(
                        time=time,
                        title=post.title,
                        url=post.link,
                        summary=summary,
                    )
                    .execute()
            )


def main():
    sched.configure()
    sched.start()


if __name__ == '__main__':
    main()
#/usr/bin/env python
#编码:utf-8
来自未来导入绝对导入、分割、打印功能
从时间导入strftime
导入feedparser
从apscheduler.schedulers.blocking导入阻止调度程序
从sqlalchemy导入创建引擎,元数据
sched=阻塞调度程序()
RSS_URL=[
'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
'https://www.yahoo.com/news/rss/',
'http://www.huffingtonpost.co.uk/feeds/index.xml',
'http://feeds.feedburner.com/TechCrunch/',
'https://www.uktech.news/feed',
]
@计划作业('间隔',分钟=1)
def进程_提要():
时间=strftime(“%a%H:%M:%S”)
摘要='text'
引擎=创建引擎(
'mysql+pymysql://::3306/?charset=utf8'
)
元数据=元数据(引擎,反射=True)
rsstracker=metadata.tables['rsstracker']
对于RSS_url中的url:
feed=feedparser.parse(url)
对于在feed.entries中发布的内容:
(
rsstracker.insert()
.价值观(
时间=时间,
title=post.title,
url=post.link,
摘要=摘要,
)
.execute()
)
def main():
sched.configure()
附表开始()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

时间列似乎有点奇怪,我希望这里有
时间戳
日期时间
,而不是一个丢弃很多信息的字符串,只留下缩写的星期和时间。

谢谢!我需要通读你的剧本才能理解你是如何做到这一点的。和我的相比,它太整洁了。至于熊猫,我从阅读开始,我知道这是不对的,但它正在发挥作用,我不想在实现我的第一个目标之前打破它,将它发送到数据库。我将研究如何将时间更改为时间戳,这正是我试图实现的目标。我可以在没有pymysql的情况下使用SQLAlchemy吗?您需要一个模块来与MySQL数据库通信,它不必是
pymysql
。SQLAlchemy文档及其特性/限制。我一直收到一个关键错误。我删除并重新创建了该表,但它仍在进行回溯(最近一次调用):文件“/usr/local/lib/python3.5/dist packages/apscheduler/executors/base.py”,第125行,在run_job retval=job.func(*job.args,**job.kwargs)文件“”中,第20行,在进程中KeyError:'rsstracker'那么没有名为rsstracker的表,或者您需要在那里提供一个更限定的名称。
打印(metadate.tables.keys())
告诉您什么?