用于抓取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运行openssl命令?   不使用线程安全类(如AtomicInteger和SynchronizedList)的java ProducerConsumer问题   匹配字符串的java模式   在java中使用泛型接口作为返回类型   java将可能具有序列化JSON值的hashmap作为节点添加到JSON字符串中   Eclipse无法从Java8流推断正确的类型   java无法了解标准JButton的大小   java我能用一个循环优化这个函数吗(在第一种方法中)?   Apache CXF中基于WebSocket的java SOAP?   java想要运行奇偶和求和三步   矩阵上随机元素的java集值   java布尔相等:0==a,操作数顺序重要吗?   java Eclipse不会退出我的插件   java如何在spring的SOAP拦截器中获取HttpServletRequest和HttpServletResponse