用于抓取ao3(我们自己的存档)的python api

ao3的Python项目详细描述


这个python包为 AO3(我们自己的档案)。

它不是正式的api。

动机

我希望能够编写使用ao3数据的python脚本。

ao3数据的官方api是on the roadmap 好几年了。在那之前,我已经拼凑了我自己的 完成这项工作的页面抓取代码。它有点乱而且易碎,但是 似乎大部分时间都在工作。

如果/当我们得到合适的api时,我会马上放弃它并执行它 是的。

安装

使用pip安装:

$ pip install ao3

我试图支持Python2.7、Python3.3+和Pypy。

用法

创建一个api实例:

>>> fromao3importAO3>>> api=AO3()

查找有关工作的信息

找工作:

>>> work=api.work(id='258626')

id是url的数字部分。例如,的工作id https://archiveofourown.org/works/258626258626

获取网址:

>>> work.url'https://archiveofourown.org/works/258626'

然后,您可以查找许多属性,类似于 页面顶部。这是您可以查找的完整设置:

>>> work.title'The Morning After'

>>> work.author'ambyr'

>>> work.summary"<p>Delicious just can't understand why it's the shy, quiet ones who get all the girls.</p>"

>>> work.rating['Teen And Up Audiences']

>>> work.warnings[]

(空列表是“无存档警告”的同义词,因此这是一个错误 值。)

>>> work.category['F/M']

>>> work.fandoms['Anthropomorfic - Fandom']

>>> work.relationship['Pinboard/Fandom']

>>> work.characters['Pinboard', 'Delicious - Character', 'Diigo - Character']

>>> work.additional_tags['crackfic', 'Meta', 'so very not my usual thing']

>>> work.language'English'

>>> work.publisheddatetime.date(2011, 9, 29)

>>> work.words605

>>> work.comments122

>>> work.kudos1238

>>> fornameinwork.kudos_left_by:... print(name)...winterbelles
AnonEhouse
SailAweigh
# and so on

>>> work.bookmarks99

>>> work.hits43037

还有一种方法可以将有关工作的所有信息转储到json中, 为了便于导出/传递到其他地方:

>>> work.json()'{"rating": ["Teen And Up Audiences"], "fandoms": ["Anthropomorfic - Fandom"], "characters": ["Pinboard", "Delicious - Character", "Diigo - Character"], "language": "English", "additional_tags": ["crackfic", "Meta", "so very not my usual thing"], "warnings": [], "id": "258626", "stats": {"hits": 43037, "words": 605, "bookmarks": 99, "comments": 122, "published": "2011-09-29", "kudos": 1238}, "author": "ambyr", "category": ["F/M"], "title": "The Morning After", "relationship": ["Pinboard/Fandom"], "summary": "<p>Delicious just can\'t understand why it\'s the shy, quiet ones who get all the girls.</p>"}'

查找您的帐户

如果您在ao3上有一个帐户,那么您可以登录访问不属于ao3的页面 向公众开放:

>>> api.login('username','password')

目前你只能做一件事:如果你有 启用历史记录后,您可以从该历史记录中获取工作ID列表,如下所示:

>>> forentryinapi.user.reading_history():... print(entry.work_id)...'123'
'456'
'789'
# and so on

您可以在“设置”窗格中启用查看历史记录。

一个有趣的副作用是你可以用它得到一个列表 你留下荣誉的作品:

fromao3importAO3fromao3.worksimportRestrictedWorkapi=AO3()api.login('username','password')forentryinapi.user.reading_history():try:work=api.work(id=entry.work_id)exceptRestrictedWork:continueprint(work.url+'... ',end='')ifapi.user.usernameinwork.kudos_left_by:print('yes')else:print('no')

警告:这太慢了。它必须返回并加载所有内容的页面 你读过书。如果你和Limited 带宽。

这不包括“受限制”的作品-要求你成为 已登录用户以查看它们。

(阅读页告诉你最后一次读什么东西的时间。如果你缓存了 结果,随后的运行只重新检查了自 最后一次,你可以让这相当有效。为读者做练习。)

许可证

这个项目是根据麻省理工学院的许可证授权的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java对ServiceListener和ServiceTracker调用提供了哪些排序保证?   java找不到方法格式的符号(DateTimeFormatter)?   mysql有没有一种方法可以将TCPDump输出到一个文件中,并用Java对其进行过滤,每5秒钟用新数据覆盖一次该文件?   java如何最好地配置用户上传支持文件的上传位置   java我在Android上使用OData4j,我无法获取实体   JPA实体关系简单示例中的java获取错误   JAVANoClassDefFoundError:安卓。应用程序。用法安卓中的UsageStatsManager   Eclipse中javaoo代码分析   java MethodVisitor抛出类格式错误   java为什么在从ViewModel调用时,改型排队不起作用?   调试小程序Java控制台:删除跟踪消息大小限制   java复杂安卓活动动画   java如何在使用JDOM2解析XML时忽略注释内容   java通过循环创建文本字段   即使在bufferedwriter关闭后也未发现java文件异常   单链表恢复中的java错误