这是一部电影的挑战


10

这是一个简单的(ish)Web抓取挑战。

输入值

您的代码应采用MPAA电影评分,并输入0到100之间的数字。它可以通过您认为方便的任何方式执行此操作。

输出量

您的代码应返回任何电影的名称,该电影应具有a)影片评级和b)Rotantomatoes在Tomatometer上的数字得分。

如果没有这样的电影,它可以输出任何您喜欢的东西。

可能的MPAA影片等级为G, PG, PG-13, R, NC-17, NR

您的代码可能会报告一部或多部电影,具体取决于您。

为了明确起见,您的代码旨在访问网络以获得查询的答案。

假设输入是“ PG,98”,那么您的代码可以输出“ Zootropolis”。

请显示一个示例代码,说明影片的评分PG和得分98以及答案。


O_O NC-17听起来很糟糕
Christopher

1
NC-17与其他飞机不同,应该是不合适的。:P
totallyhuman人类

我的答案应该返回不止一部电影吗?
BlackCap,

1
@BlackCap编辑了问题。随你(由你决定。

Zootropolis或Zootopia?
BlackCap

Answers:


2

Stratos,133字节

{
f"www.rottentomatoes.com/api/private/v2.0/browse?minTomato=%&maxTomato=%&type=dvd-streaming-all"r"results")s"mpaaRating"=⁰
s"title"

尝试一下!


您能否显示一个示例,说明您的代码正在使用中。

@Lembik好吧,运行它,然后输入数字,按Enter键,输入等级,按Enter键,它将为您提供输出。
Okx

你能丢掉www.吗?
毛茸茸的

@Shaggy不幸的是没有。
Okx

也许您可以发布它正在运行的屏幕截图?

12

Bash,182字节

curl "https://www.rottentomatoes.com/api/private/v2.0/browse?minTomato=$2&maxTomato=$2&type=dvd-streaming-all" 2>/dev/null|grep -o "{[^}]*aRating\":\"$1\""|grep -Po 'title":"\K[^"]*'

用法:

$ bash script PG 98
The Island President
Inside Out
Zootopia
Paddington
Love & Friendship
Long Way North (Tout en haut du monde)

我真的很喜欢这个答案。

6

的JavaScript(ES6),167个 162 159字节

需要从rottentomatoes.com的根目录运行返回Promise包含标题对象

s=>n=>fetch(`api/private/v2.0/browse?minTomato=${n}&maxTomato=${n}&type=dvd-streaming-all`).then(r=>r.json()).then(j=>j.results.find(x=>x.mpaaRating==s).title)

如果我们可以要求它在特定目录中运行,那么它将变为139个字节:

s=>n=>fetch(`browse?minTomato=${n}&maxTomato=${n}&type=dvd-streaming-all`).then(r=>r.json()).then(j=>j.results.find(x=>x.mpaaRating==s).title)

如果有一种单击和查看的方式来测试Javascript答案,那就太好了。

@Lembik:通常可以在使用API​​时完成,但是在这种情况下,RT的CORS策略会阻止它。顺便说一下,谢谢您的接受。
毛茸茸的

嗯..我只是注意到答案较短,但是我现在没有能力/专业知识来测试Stratos代码。如果这样做,对不起,我将不得不更改接受。

@Lembik:我完全希望Stratos能够做到(到目前为止)。
毛茸茸的

哦,我向另一个“发现电影”问题添加了赏金:)

3

Python 2 +请求,209 204字节

-5字节感谢IanGödel。

lambda r,t:[i['title']for i in get('http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all'%(t,t)).json()['results']if i['mpaaRating']==r]
from requests import*

1
认为您可能需要(t,t)在哪里(r,r)
ElPedro

1
您可以使用以下链接:http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-allhttps-> http并放置www.保存几个字节

1
您能否显示一个示例,说明您的代码正在使用中。

2

q / kdb +,168个字节

解:

{(r(&)(r:.j.k[.Q.hg`$"https://www.rottentomatoes.com/api/private/v2.0/browse?type=dvd-streaming-all&min",t,"&max",t:"Tomato=",y]`results)[;`mpaaRating]like x)[;`title]}

例:

q){(r(&)(r:.j.k[.Q.hg`$"https://www.rottentomatoes.com/api/private/v2.0/browse?type=dvd-streaming-all&min",t,"&max",t:"Tomato=",y]`results)[;`mpaaRating]like x)[;`title]}["PG";"98"]
"The Island President"
"Inside Out"
"Zootopia"
"Paddington"
"Love & Friendship"
"Long Way North (Tout en haut du monde)"

说明:

.Q.hg           / fetch a URL
.j.k            / parse json string into Q dictionaries
`results        / index into dictionary with key `results
[;`mpaaRating]  / index into these sub dictionaries extracting mpaaRating
like x          / binary list where they match, e.g. "PG"
(&)             / where, list indices where true
[;`title]       / index into dictionary with key `title

笔记:

  • 如果您想自己尝试一下,请仔细阅读Cookbook / SSL页面,以确保正确设置环境。
  • 失败若能去除shttps,或者www.,给予301 Permanently Moved响应。

也许在答案的标题中添加“ q / kdb +”的链接?很多人永远不会听说它,因此您可以教育他们(我)。

完成:)我希望可以用OK编写解决方案,但是在使用在线repl时得到“不存在'Access-Control-Allow-Origin'标头...”(johnearnest.github.io/ok/index.html),因此已退回到封闭源代码
Q。– streetster

2

JavaScript(ES2017),158个字节

async(r,n)=>(await(await fetch(`api/private/v2.0/browse?minTomato=${n}&maxTomato=${n}&type=dvd-streaming-all`)).json()).results.find(m=>m.mpaaRating==r).title

烂番茄主页运行:

f=async(r,n)=>(await fetch(`api/private/v2.0/browse?minTomato=${n}&maxTomato=${n}&type=dvd-streaming-all`).then(x=>x.json())).results.find(m=>m.mpaaRating==r).title
f('PG',98).then(console.log)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.