Es ist eine Herausforderung, einen Film zu finden


10

Dies ist eine einfache (ish) Web-Scraping-Herausforderung.

Eingang

Ihr Code sollte eine MPAA-Filmbewertung und eine Zahl von 0 bis 100 als Eingabe verwenden. Dies kann auf jede Art und Weise geschehen, die Sie für zweckmäßig halten.

Ausgabe

Ihr Code sollte den Namen eines Films zurückgeben, der a) diese Filmbewertung und b) die numerische Bewertung von Rottentomaten auf dem Tomatometer hat .

Wenn es keinen solchen Film gibt, kann er alles ausgeben, was Sie möchten.

Die möglichen MPAA-Filmbewertungen sind G, PG, PG-13, R, NC-17, NR.

Ihr Code kann einen oder mehrere Filme melden, das liegt bei Ihnen.

Zur Verdeutlichung soll Ihr Code auf das Web zugreifen, um Antworten auf Fragen zu erhalten.

Beispiel

Angenommen, die Eingabe ist "PG, 98", dann könnte Ihr Code "Zootropolis" ausgeben.

Bitte zeigen Sie ein Beispiel Ihres Codes, der mit der Filmbewertung PGund der Partitur 98zusammen mit Ihrer Antwort arbeitet.


O_O NC-17 klingt schlecht
Christopher

1
NC-17, im Gegensatz zu den anderen, ist angeblich unangemessen. : P
totalhuman

Sollte meine Antwort mehr als einen Film zurückgeben?
BlackCap

1
@BlackCap Die Frage wurde bearbeitet. Das liegt an dir.

Zootropolis oder Zootopia?
BlackCap

Antworten:


2

Stratos , 133 Bytes

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

Versuch es!


Könnten Sie bitte ein Beispiel für die Verwendung Ihres Codes zeigen?

@Lembik Nun, führen Sie es aus und geben Sie die Nummer ein, drücken Sie die Eingabetaste, geben Sie die Bewertung ein, drücken Sie die Eingabetaste, und Sie erhalten die Ausgabe.
Okx

Kannst du das fallen lassen www.?
Shaggy

@ Shaggy Leider nicht.
Okx

Vielleicht könntest du einfach einen Screenshot davon posten, der läuft?

12

Bash, 182 Bytes

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[^"]*'

Verwendungszweck:

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

Diese Antwort gefällt mir sehr gut.

6

JavaScript (ES6), 167 162 159 Byte

Muss von der Wurzel von rottentomatoes.com ausgeführt werden . Gibt ein PromiseObjekt zurück, das den Titel enthält.

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)

Wenn wir verlangen können , dass es in einem bestimmten Verzeichnis ausgeführt wird, werden es 139 Bytes:

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)

Es wäre großartig, wenn es einen Klick und eine Möglichkeit gäbe, Javascript-Antworten zu testen.

@Lembik: Normalerweise kann dies bei der Arbeit mit APIs durchgeführt werden. In diesem Fall wird dies jedoch durch die CORS-Richtlinie von RT verhindert. Danke übrigens für die Annahme.
Shaggy

Hmm..Ich habe gerade bemerkt, dass es kürzere Antworten gibt, aber ich habe momentan nicht die Energie / das Fachwissen, um Stratos-Code zu testen. Wenn ich das tue, muss ich die Annahme ändern, sorry.

@Lembik: Ich habe voll und ganz damit gerechnet, dass Stratos es bekommt (bis jetzt).
Shaggy

Oh, ich habe der anderen Frage nach einem Film ein Kopfgeld hinzugefügt :)

3

Python 2 + -Anfragen, 209 204 Bytes

-5 Bytes dank Ian Gö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
Denken Sie, Sie brauchen möglicherweise (t, t), wo Sie (r, r) haben
ElPedro

1
Sie können diesen Link verwenden: http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all( https-> httpund löschen Sie den www.) für ein paar gespeicherte Bytes .

1
Könnten Sie bitte ein Beispiel für die Verwendung Ihres Codes zeigen?

2

q / kdb + , 168 Bytes

Lösung:

{(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]}

Beispiel:

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)"

Erläuterung:

.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

Anmerkungen:

  • Wenn Sie dies selbst ausprobieren möchten, lesen Sie die Seite Kochbuch / SSL durch, um sicherzustellen, dass Ihre Umgebung korrekt eingerichtet ist.
  • Schlägt fehl, wenn wir das svon httpsoder das entfernen www., gibt 301 Permanently MovedAntwort.

Fügen Sie möglicherweise einen Link für "q / kdb +" in den Titel Ihrer Antwort ein? Viele Leute werden noch nie davon gehört haben und Sie können sie (mich) erziehen.

Fertig :) Ich hatte gehofft, eine Lösung in OK zu schreiben, aber bei Verwendung der Online-Antwort ( johnearnest.github.io/ok/index.html ist der Header 'No' Access-Control-Allow-Origin 'vorhanden ...' ), so sind auf die Closed-Source-Q zurückgefallen.
Streetster

2

JavaScript (ES2017), 158 Byte

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ühren Sie die Startseite von Rotten Tomatoes aus :

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.