用GAE(python)创建了一个Twitter机器人(带有大量参考文献)

已完成的产品

使用 GAE(python)开发的 Twitter 机器人。

我撰写这篇投稿的原因

自上个月开始,我在工作中越来越多地使用GAE(Python)的机会,但我从未尝试过从头开始使用GAE(Python)创建一个真正的应用(只有在helloworld和官方教程中的guestbook这样的例子)。所以,我决定利用这个机会尝试制作一个Twitter BOT(因为对于批处理功能等理解还很薄弱)。

这个机器人是在一款名为《英雄联盟》的海外知名游戏中,自动将注册用户最近参与的对战比赛中其他召唤师名称发布到Twitter上。使用tweepy进行Twitter的OAuth认证,通过RIOT API获取《英雄联盟》的比赛结果和召唤师名称,并将结果存储在ndb中。

实施的步骤

    • Tweepyを使ってTwitterのOAuth認証を行なって、そのあとにmodelUserにTwitterのアクセストークンなどの情報を格納する

 

    • /registrationのフォーム画面にて自分のサモナーネームを登録し、RIOT APIを経由して取得したサモナーネームやアカウントIdなどをmodelTaskに格納する

 

    taskqueue(push)を使って、modelTaskに含まれるaccountIdを使って直近の試合において参加したサモナーの名前をAPIから引っ張ってきて、その参加者を4名だけTwitterで自動投稿させる

然而,在实施上述项目时,很少有GAE(使用python)的实现示例可供参考,而且即使有,版本等信息也太过陈旧,无法正常运行的情况很常见,这给我带来了很多困扰。因此,这次我在参考文献中提供了大量的参考URL…!总之,我尽量涵盖了自己遇到的所有问题,希望您能参考一下。

此外,我也在Github上提供了真正的成品源代码和使用方法,如果您想先进行行为验证,可以参考Github上的README,希望对您的学习有所帮助。

参考资料

在创建这个BOT之前参考的主要网站是GAE/P+Tweepy+RIOT API创建Twitter BOT服务!(上篇)

通过GAE/P+Tweepy+RIOT API创建Twitter BOT服务!(后续部分)

我在Riot API上尝试获取账户信息。

「获取Twitter和RIOT API访问密钥的方法」
整理了自Twitter API注册(账户申请方法)到获得批准的步骤汇总※截止至2019年8月的信息。

我尝试使用Riot API获取帐户信息。

「在我苦于安装Tweepy时查看的网站」
使用Flask和Tweepy创建Google App Engine的Twitter Bot

在Google App Engine(Python)中使用第三方库的方法提示

在GAE/Py中遇到”ImportError: No module named _winreg”错误的原因和解决方法。

如果不安装setup.cfg,将在lib文件夹使用pip install时报错,这在Stack Overflow上已经被证实。

在GAE内置的第三方库列表表格中(可在app.yaml中安装的库)

如果想要将所有依赖都记录在一个名为 requirement.txt 的文件中并使用 pip 进行安装的人,请参考这里。

「在实施过程中遇到困难时帮了很大忙的网站」
解决requests相关的行为错误,只需要安装requests_toolbelt.adapters.appengine即可解决。

我在实践Tweepy的OAuth1a认证时参考的网址是什么?

在批处理时,同一条推文无法连续自动发布,会抛出错误,请在验证时注意。

对于想了解Twitter的OAuth认证的人来说,
最简单易懂的OAuth解释
在应用开发中需要了解的认证技术——OAuth 1.0 + OAuth 2.0 + OpenID Connect

总结

这次我尝试使用GAE(Python)来制作Twitter BOT。由于缺乏具体的实施示例,我在与taskqueue和ndb等细节规范的官方参考资料对抗中成功完成了实施。

如果您在工作或者兴趣爱好中有机会使用GAE(Python),我希望您可以参考这里的内容来进行实现并加深对其的理解。也希望您能将其作为培训的资源进行充分利用(在从Github克隆时,请务必为其点亮星星!)

当完成初期实施时的感想

    • ルーティングはroutes.pyで一つのファイルにまとめるべきだった

 

    • memcacheを使ってもよかったかもしれない

 

    • フロント画面を綺麗にしたかった

 

    ndb周りの理解が思った以上に不十分だった
广告
将在 10 秒后关闭
bannerAds