我想请教一个关于在云服务器上托管个人项目的问题,这应该挺简单的(至少我认为)。目前,我每天都要手动执行我的脚本。我希望能通过在云端服务器上设定定时任务来自动化这个流程,实现“设置一次就无需再管”的效果。
项目详情: 我的项目从多个网站抓取NBA数据,并为当天的每一场比赛做出预测。预测结果会通过推特发布,并存储在SQLite数据库中,以便于下次运行时验证之前的预测。下面是项目的目录结构。
考虑到实际项目有些复杂,下面提供了一个简化的版本,包含了大部分基础功能,我会用这个简化版来测试或熟悉最终选用的服务。
cloudTest
是根目录,包含以下文件:
cloudTest
│ ├── __pycache__
│ │ └── config.cpython-311.pyc
│ ├── config.py
│ ├── example.db
│ ├── pic.png
│ └── test.py
其中test.py
是核心脚本,实现了主要的功能,如下所示:
import sqlite3
import os
import tweepy
import config
# 创建SQLite数据库并插入数据
current_directory = os.getcwd()
db_file_path = os.path.join(current_directory, 'example.db')
conn = sqlite3.connect(db_file_path)
cur = conn.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS example_table (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);''')
# 获取当前最大ID
max_id_query = 'SELECT MAX(id) FROM example_table'
cur.execute(max_id_query)
max_id = cur.fetchone()[0] if cur.fetchone() else 0
new_name = "New User"
new_age = 25
new_id = max_id + 1
insert_query = 'INSERT INTO example_table (id, name, age) VALUES (?, ?, ?)'
cur.execute(insert_query, (new_id, new_name, new_age))
conn.commit()
cur.execute(f"SELECT * FROM example_table WHERE id = {new_id}")
new_data = cur.fetchone()
conn.close()
# 推特认证及发送推文
auth = tweepy.OAuth1UserHandler(config.CONSUMER_KEY, config.CONSUMER_SECRET)
auth.set_access_token(config.ACCESS_TOKEN, config.ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
client = tweepy.Client(
consumer_key=config.CONSUMER_KEY,
consumer_secret=config.CONSUMER_SECRET,
access_token=config.ACCESS_TOKEN,
access_token_secret=config.ACCESS_TOKEN_SECRET,
)
media = api.simple_upload(os.path.join(current_directory, 'pic.png'))
client.create_tweet(text=f"Just inserted {new_data}", media_ids=[media.media_id])
我在线查找过答案,但因为对云服务和外部服务器不够熟悉,所以不知从何下手。原本以为这个问题解决起来应该挺直接的,但研究了一番之后发现似乎没那么简单。能否有人给我指条明路?或者有没有什么好的资源可以学习?
这里有一些可能有帮助的信息:
- 我刚开了一个GCP账户,有300美元的额度可以使用。
- 我看到很多人推荐使用Google Functions来做这类事情,但我觉得我的项目可能太庞大了,不合适。我的项目中定义了嵌套的Python包,而且我不确定SQLite数据库在Google Functions中应该如何操作。此外,我还安装使用了一些非Python默认提供的包。不过,如果有人觉得Google Functions仍然是个好选择,请告诉我。
- 还有人提议使用像DigitalOcean这样的服务,这是正确的方向吗?
如果还需要更多信息,请告诉我。我衷心感谢所有提供的帮助和建议。