python库为媒体数据库提供者提供了一个高级接口,允许用户使用一个简单的接口搜索电视和电影元数据

mapi的Python项目详细描述


pypitravis_cicoveragelicenceapicode style black

MAPI

m api(metadataapi)是一个python库,它为媒体数据库提供商提供了一个高级接口,允许用户使用一个简单的接口高效地搜索电视和电影元数据。

安装

  • $ pip install mapi

运行测试

  • $ pip install -r requirements-testing.txt
  • $ python -m pytest

注释:

  • 首先运行pip install -r requirements-dev.txt以安装测试依赖项
  • 测试需要互联网接入
  • 测试要求将API_KEY_TMDBTVDB_API_KEY定义为环境变量

示例

使用TVDB按系列搜索电视节目

下面是一个相当直接的例子,假设我们只想从Rick和Morty第二季中获得一个剧集列表:

frommapi.providersimportTVDbclient=TVDb()# API Key taken from environment variablesresults=client.search(series='Rick and Morty',season=2)forresultinresults:print(result)
Rick and Morty - 02x01 - A Rickle in Time
Rick and Morty - 02x02 - Mortynight Run
Rick and Morty - 02x03 - Auto Erotic Assimilation
Rick and Morty - 02x04 - Total Rickall
Rick and Morty - 02x05 - Get Schwifty
Rick and Morty - 02x06 - The Ricks Must Be Crazy
Rick and Morty - 02x07 - Big Trouble in Little Sanchez
Rick and Morty - 02x08 - Interdimensional Cable 2: Tempting Fate
Rick and Morty - 02x09 - Look Who's Purging Now
Rick and Morty - 02x10 - The Wedding Squanchers

按片名和年份搜索电影

好吧,不,我们想看看电影。我们可以通过使用'-year'的上限、使用'year-'的下限或使用'year-year'的年份范围来搜索使用特定年份。让我们用后者来列出90年代的星际迷航电影。事实证明,有很多。

frommapi.providersimportTMDbclient=TMDb()results=client.search(title='Star Trek',year='1990-1999')fori,resultinenumerate(results,1):print('%d) %s'%(i,result))ifi>9:break
1) Star Trek: Voyager (1995)
2) Star Trek: First Contact (1996)
3) Star Trek VI: The Undiscovered Country (1991)
4) Star Trek: Generations (1994)
5) Star Trek: Insurrection (1998)
6) Star Trek: The Experience - The Klingon Encounter (1998)
7) Journey's End: The Saga of Star Trek - The Next Generation (1994)
8) Star Trek: 30 Years and Beyond (1996)
9) Ultimate Trek: Star Trek's Greatest Moments (1999)
10) Star Trek: A Captain's Log (1994)

搜索返回一个生成器,因此通过中断10,我们只要求我们需要什么,减少了请求所需的带宽和时间。

按ID查找电影

如果您只想使用api提供程序的id代码查找元数据,也可以这样做:

frompprintimportpprintfrommapi.providersimportTMDbclient=TMDb()results=client.search(id_tmdb=9340)# Using TMDb IDpprint(dict(next(results)))
{'date': '1985-06-06',
 'id_tmdb': '9340',
 'media': 'movie',
 'synopsis': 'A young teenager named Mikey Walsh finds an old treasure map in '
             "his father's attic. Hoping to save their homes from demolition, "
             'Mikey and his friends Data Wang, Chunk Cohen, and Mouth '
             'Devereaux run off on a big quest to find the secret stash of '
             'Pirate One-Eyed Willie.',
 'title': 'The Goonies'}

有些api,比如tmdb,允许您通过imdb 'tt-const'进行搜索

frompprintimportpprintfrommapi.providersimportTMDbclient=TMDb()results=client.search(id_imdb='tt0089218')# Using IMDb IDpprint(dict(next(results)))
{'date': '1985-06-06',
 'id_tmdb': 9340,
 'media': 'movie',
 'synopsis': 'A young teenager named Mikey Walsh finds an old treasure map in '
             "his father's attic. Hoping to save their homes from demolition, "
             'Mikey and his friends Data Wang, Chunk Cohen, and Mouth '
             'Devereaux run off on a big quest to find the secret stash of '
             'Pirate One-Eyed Willie.',
 'title': 'The Goonies'}

处理搜索出错

并非所有的搜索都会产生结果;可能是您输入了错误,可能是数据不存在,或者不需要担心,这可以使用异常处理来优雅地处理:

frommapi.exceptionsimportMapiNotFoundExceptionfrommapi.providersimportTMDbclient=TMDb()try:print(next(client.search(id_imdb='invalid_id')))exceptMapiNotFoundException:print('Nothing found :(')
None found :(

使用详细信息

提供商配置

  • TVDB和TMDB需要一个API密钥才能成功初始化
  • 这些可以使用环境变量提供;API_KEY_TMDBAPI_KEY_TVDB,分别是
  • 它们也可以作为api_key提供,这是提供程序类的参数。

搜索

下表描述了可用于给定搜索查询的允许字段。额外字段将被忽略。

FieldAPITypeDescriptionNotes
id_imdbTMDb, TVDbstrIMDb movie id key1, 2
id_tmdbTMDbstr / intTMDb movie id key2, 3
id_tvdbTVDb series id keystr / intTVDb season id key2, 3
titleTMDBstrFeature's title
yearTMDBstr / intFeature's release year
dateTVDBstrYYYY-MM-DD formatted4
seriesTVDBstrSeries' name
seasonTVDBstr / intSeries' airing season
episodeTVDbstr / intSeries' airing episode3

结果

保证每个提供程序都将以下字段作为字符串返回,以便成功搜索。注意,它们基本上是作为搜索参数的字段——事实上,如果您愿意,甚至可以在彼此内部进行下一次搜索调用。

FieldAPIDescription
id_tmdbTMDbTMDb movie id key
id_tvdbTVDbTVDb season id key
dateALLMedia's release date (YYYY-MM-DD)
synopsisALLMedia synopsis
mediaALLMedia type; either ^{} or ^{}
seriesTVDbSeries' name
seasonTVDbSeries' airing season
episodeTVDBSeries' airing episode

格式化

MAPI使用Python的标准字符串格式约定。您可以调用MAPI对象上的内置format()函数并使用任何结果键。您可以在数字字段(如剧集和季节)上使用格式说明符。例如format(metadata, "{series} S{season:02}E{episode:02}")将把季节和插曲的数字增加到两位数。

许可证

麻省理工学院。有关详细信息,请参见license.txt

注释

  1. id_imdb必须以tt作为前缀。
  2. 尽管id、title和series都是可选的,但是电影查询必须有id或title才能产生任何结果,电视查询必须有and id或series才能产生任何结果。
  3. 如果此字段作为字符串传递,则它必须是数字。
  4. 日期也可以部分指定,例如YYYY-MMYYYY

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

推荐PyPI第三方库


热门话题
java使用Jackson解析非同构JSON对象数组   java为什么'Stream<T>::<A>toArray(IntFunction<A[]>)`接受没有绑定的类型参数A?   java在JavaFX2.0中获取给定布局中的节点大小?   java双链接列表创建节点   java使用HashMap添加、删除和查找   java中push_back(C++)的等效方法是什么?   java在Jetty中运行servlet时获得HTTP 500   用java显示包含图像和文本的页面的最简单文档格式   swing从选项卡窗格Java中的不同选项卡访问数据   字符串Java帮助检查登录类使用。CSV文件   java Struts 1.2.9动作链接   包含max元素的java列表   currentNode上的jcr Java空检查   在Android中使用OpenNLP的POSTaggerMe时出现java NullPointerException   java Logback只将消息记录到syslog一次   如何用Java编写构造函数的API文档   java从gallery中获取所有图像并存储在阵列中   java Maven:将外部jar文件夹添加到类路径