È una sfida per trovare un film


10

Questa è una semplice (ish) sfida di web scraping.

Ingresso

Il tuo codice dovrebbe avere una valutazione del film MPAA e un numero compreso tra 0 e 100 come input. Può farlo in qualsiasi modo tu ritenga conveniente.

Produzione

Il tuo codice dovrebbe restituire il nome di ogni film che ha a) quella valutazione del film eb) il punteggio numerico sul Tomatometro da rottentomatoes .

Se non esiste un film del genere, è possibile riprodurre qualsiasi cosa tu voglia.

Le possibili valutazioni dei film MPAA sono G, PG, PG-13, R, NC-17, NR.

Il tuo codice può segnalare uno o più film, dipende da te.

Per chiarire, il tuo codice ha lo scopo di accedere al web per ottenere le risposte alle domande.

Esempio

Supponiamo che l'ingresso sia "PG, 98", quindi il tuo codice potrebbe generare "Zootropolis".

Si prega di mostrare un esempio del codice che funziona con la valutazione del film PGe il punteggio 98insieme alla risposta.


O_O NC-17 suona male
Christopher,

1
NC-17, a differenza degli altri, dovrebbe essere inappropriato. : P
totalmente umano il

La mia risposta dovrebbe restituire più di un film?
BlackCap,

1
@BlackCap Ha modificato la domanda. Dipende da te.

Zootropoli o Zootropolis?
BlackCap,

Risposte:


2

Stratos , 133 byte

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

Provalo!


Potresti mostrare un esempio del tuo codice usato per favore.

@Lembik Bene, eseguilo e digita il numero, premi invio, digita la valutazione, premi invio e ti darà l'output.
Okx,

Puoi lasciar perdere www.?
Shaggy,

@Shaggy Purtroppo no.
Okx,

Forse potresti semplicemente pubblicare uno screenshot di esso in esecuzione?

12

Bash, 182 byte

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

Uso:

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

Mi piace molto questa risposta.

6

JavaScript (ES6), 167 162 159 byte

Deve essere eseguito dalla radice di rottentomatoes.com . Restituisce un Promiseoggetto contenente il titolo.

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)

Se possiamo richiedere che venga eseguito in una directory specifica , diventa 139 byte:

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)

Sarebbe bello se ci fosse un clic e cercare un modo per testare le risposte Javascript.

@Lembik: normalmente ciò può essere fatto quando si lavora con le API ma, in questo caso, la politica CORS di RT lo impedisce. Grazie per l'accettazione, comunque.
Shaggy,

Hmm..ho appena notato che ci sono risposte più brevi ma non ho l'energia / le competenze per testare il codice Stratos in questo momento. In tal caso, dovrò modificare l'accettazione, scusa.

@Lembik: mi aspettavo che Stratos lo ottenga (finora).
Shaggy,

Oh, ho aggiunto una generosità all'altra domanda per trovare un film :)

3

Python 2 + richieste, 209 204 byte

-5 byte grazie a 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
Penso che potresti aver bisogno di (t, t) dove hai (r, r)
ElPedro,

1
È possibile utilizzare questo collegamento: http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all( https-> httpe rilasciare www.) per un paio di byte salvati .

1
Potresti mostrare un esempio del tuo codice usato per favore.

2

q / kdb + , 168 byte

Soluzione:

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

Esempio:

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

Spiegazione:

.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

Appunti:

  • Se vuoi provare tu stesso, leggi la pagina Cookbook / SSL per assicurarti che il tuo ambiente sia configurato correttamente.
  • Non riesce se togliamo la sdi https, o www., dà 301 Permanently Movedrisposta.

Forse aggiungi un link per "q / kdb +" nel titolo della tua risposta? Molte persone non ne avranno mai sentito parlare e tu puoi educarli (io).

Fatto :) Speravo di scrivere una soluzione in oK ma è presente un'intestazione "No" Access-Control-Allow-Origin "..." quando si utilizza la sostituzione online ( johnearnest.github.io/ok/index.html ), così hanno falled di nuovo alla closed-source D.
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

Esegui dalla home page di Rotten Tomatoes :

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.