使用 ReelGood API 在 Netflix 上搜索和过滤节目和电影
制成:
此应用程序目前已损坏 - ReelGood 已迁移到在其网站上使用 V3 API,而 V2 API 不再工作。如果您想了解如何使用新的 API 端点并贡献 PR,请这样做。
请参阅问题#5。
到目前为止,该项目仅使用模板将单页 API 结果表示为文本和图像。
没有花哨的报告或过滤。
另外,我可能会在 Vue 中重建它,而不是 Mustache。
ReelGood 是一项提供包括 Netflix 在内的许多在线服务的电视节目和电影列表的服务。
ReelGood 在其网站上有一个很棒的 GUI,可以轻松导航以进行搜索和过滤。他们还使用 API 作为其中的一部分。我想构建自己的演出指南报告和推荐列表,因此我使用客户端 JS 从他们的 API 中提取数据并将其呈现在网站上。
查看网站:
如果您不熟悉 Netlify / Lambda 函数,请参阅我的食谱。
直接测试 JSON API 端点:
克隆存储库:
$ git clone [email protected]:MichaelCurrin/netflix-assistant.git
$ cd netflix-assistant
没有构建或安装步骤!
下面继续。
使用 Serverless 进行 API 请求
此应用程序无法直接执行浏览器请求 ReelGood API(在本地这没问题,但在部署的站点上您会收到错误)。 API 更改导致存在 CORS 错误。
因此,该应用程序经过重新设计,以使用 Netlify 的免费Functions功能(基于 AWS Lambda 构建)。
函数是使用简短的 JS 脚本定义的,该脚本托管在 Netlify 上。当对此函数的端点发出请求时,系统会向 ReelGood API 发出请求,并将结果作为缓存的 JSON 响应返回。
这比构建 Python 或 Node API 简单得多,因为这需要更多代码并且无法托管在 Netlify 上。
缺点是该功能只能在云端运行,不能在本地服务器上运行。
有一些方法可以解决这个问题:
http
库的简短脚本来设置服务器,只需添加一行额外的行来调用某个端点上的 JS 脚本 - 这意味着您只需要一台服务器和一个端口。请注意,本地使用受到限制 - 请参阅上面的部分。
在根目录中启动 Web 服务器。
请参阅本要点中的方法或使用下面的方法。
$ python3 -m http.server
在浏览器中打开。例如
该项目中有一个基本的 shell 脚本,它使用 Bash 和 cURL 从 ReelGood API 获取数据。
这种方法不是使用上面介绍的按需函数,而是从 API 中抓取数据并将其存储为 JSON 数据,如果您关心的话,可以将其保留在已部署的应用程序中或提交给版本控制。然后前端可以使用该数据 - 这会快得多,因为所有分页都已处理。以稍微陈旧的数据和查询大型静态 JSON 文件为代价。可以进行一些清理,以便 JSON 文件仅包含感兴趣的字段。
该脚本从 API 获取节目的前两页,其中 IMDB 和 ReelGood 分数高于 50%。如果您想智能分页,建议使用 Python 或类似的更高级处理 - 即替换为更高的skip
值,直到没有更多页面。
运行为:
$ cd scrape
$ ./get_shows.sh
然后查看out
子目录下创建的JSON文件
远程设置
该存储库可以免费部署在 Netlify 上 - 作为静态网站以及用于无服务器后端调用外部 API 的 Netlify 函数。
必须为 API 请求设置 CORS 标头,但无法在 Github Pages 上设置。此外,这使用了 Netlify 上的 Function,而 GitHub Pages 不支持该功能。
在 ReelGood 的网站上,您可以查看可在 Netflix 上观看的电视节目和电影。
该页面支持过滤器参数、排序选项和显示格式选项。
显示数据是从 ReelGood API 检索的。
这是在初始页面加载、应用过滤/排序以及单击页面底部的“加载更多”时完成的。
该 API 可以免费使用,并且在其常见问题解答页面上提供了请求 API 访问的详细信息。我发现无需向他们发送电子邮件即可轻松访问该 API。我还没有找到它的文档,所以我将我所做的 GUI 选择与发出的 API 请求进行比较,并推断 API 请求上的字段如何工作以及响应字段的含义。
$.getJSON
(前端)和axios
(函数)来简化项目。为了避免 CORS 错误,该项目使用 Netlify 上的函数(又名 Lambda)来请求服务器端的数据,然后使数据在与浏览器请求相同的域中可用。
请参阅 Netlify 函数。
另请参阅博客文章。
本地设置可以使用 Netlify 库,或者只是基于ENV=dev
或 local/remote 等标志使用原始 URL(幸运的是,即使在 Netlify 上确实如此,它也不会在本地主机上产生 CORS 错误)作为后备。
由 @MichaelCurrin 在 MIT 下发布。