Es un desafío para encontrar una película


10

Este es un desafío de raspado web simple (ish).

Entrada

Su código debe tener una clasificación de película MPAA y un número de 0 a 100 como entrada. Puede hacer esto de cualquier manera que le resulte conveniente.

Salida

Su código debe devolver el nombre de cualquier película que tenga a) esa calificación de película yb) la puntuación numérica en el Tomatómetro de rottentomatoes .

Si no existe tal película, puede emitir lo que desee.

Las clasificaciones posibles de la película MPAA son G, PG, PG-13, R, NC-17, NR.

Su código puede reportar una o más películas, eso depende de usted.

Para aclarar, su código está destinado a acceder a la web para obtener las respuestas a las consultas.

Ejemplo

Digamos que la entrada es "PG, 98", entonces su código podría generar "Zootropolis".

Muestre un ejemplo de su código trabajando con la calificación PGy puntuación de la película 98junto con su respuesta.


O_O NC-17 suena mal
Christopher

1
Se supone que NC-17, a diferencia de los demás, es inapropiado. : P
totalmente humano

¿Debería mi respuesta devolver más de una película?
BlackCap

1
@BlackCap Editó la pregunta. Eso depende de usted.

Zootropolis o Zootopia?
BlackCap

Respuestas:


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"

¡Intentalo!


¿Podría mostrar un ejemplo de su código en uso, por favor?

@Lembik Bueno, ejecútelo y escriba el número, presione enter, escriba la calificación, presione enter y le dará el resultado.
Okx

¿Puedes soltar el www.?
Shaggy

@ Shaggy Lamentablemente no.
Okx

¿Tal vez podrías publicar una captura de pantalla en ejecución?

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

Uso:

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

Realmente me gusta esta respuesta.

6

JavaScript (ES6), 167 162 159 bytes

Debe ejecutarse desde la raíz de rottentomatoes.com . Devuelve un Promiseobjeto que contiene el título.

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)

Si podemos requerir que se ejecute en un directorio específico, entonces se convierte en 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)

Sería genial si hubiera un clic y una forma de probar las respuestas de Javascript.

@Lembik: normalmente eso se puede hacer cuando se trabaja con API pero, en este caso, la política CORS de RT lo impide. Gracias por aceptar, por cierto.
Shaggy

Hmm ... Acabo de notar que hay respuestas más cortas, pero no tengo la energía / experiencia para probar el código Stratos en este momento. Si lo hago, tendré que cambiar la aceptación, lo siento.

@Lembik: esperaba que Stratos lo obtuviera (hasta ahora).
Shaggy

Oh, agregué una recompensa a la otra pregunta de encontrar una película :)

3

Python 2 + solicitudes, 209204 bytes

-5 bytes gracias 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
Creo que puede necesitar (t, t) donde tiene (r, r)
ElPedro

1
Puede usar este enlace: http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all( https-> httpy soltar el www.) para un par de bytes guardados .

1
¿Podría mostrar un ejemplo de su código en uso, por favor?

2

q / kdb + , 168 bytes

Solución:

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

Ejemplo:

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

Explicación:

.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

Notas:

  • Si desea probarlo usted mismo, lea la página Cookbook / SSL para asegurarse de que su entorno esté configurado correctamente.
  • Falla si eliminamos el sde https, o el www., da 301 Permanently Movedrespuesta.

¿Quizás agregue un enlace para "q / kdb +" en el título de su respuesta? Mucha gente nunca lo habrá oído y puedes educarlos (a mí).

Hecho :) Esperaba escribir una solución en OK, pero aparece el encabezado 'No' Access-Control-Allow-Origin '... cuando utilizo la respuesta en línea ( johnearnest.github.io/ok/index.html ), así que volví a la fuente cerrada P.
streetter

2

JavaScript (ES2017), 158 bytes

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

Ejecute desde la página de inicio de 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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.