É um desafio de encontrar um filme


10

Esse é um desafio simples (de ish) de raspagem da web.

Entrada

Seu código deve ter uma classificação de filme MPAA e um número de 0 a 100 como entrada. Pode fazer isso da maneira que achar conveniente.

Resultado

Seu código deve retornar o nome de qualquer filme que tenha a) a classificação do filme eb) a pontuação numérica no Tomatômetro em rottentomatoes .

Se não houver esse filme, ele poderá produzir o que quiser.

As possíveis classificações de filmes MPAA são G, PG, PG-13, R, NC-17, NR.

Seu código pode denunciar um ou mais filmes, você decide.

Para esclarecer, seu código tem como objetivo acessar a web e obter respostas para as consultas.

Exemplo

Digamos que a entrada seja "PG, 98", seu código pode gerar "Zootropolis".

Por favor, mostre um exemplo do seu código trabalhando com a classificação PGe a pontuação do filme, 98juntamente com a sua resposta.


O_O NC-17 parece ruim #
Christopher

11
O NC-17, diferentemente dos outros, deve ser inapropriado. : P
totallyhuman

Minha resposta deve retornar mais de um filme?
BlackCap 26/09

11
@BlackCap Editou a pergunta. Isso é contigo.

Zootrópolis ou Zootopia?
BlackCap 26/09

Respostas:


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"

Tente!


Você poderia mostrar um exemplo do seu código sendo usado, por favor.

@Lembik Bem, execute-o e digite o número, pressione enter, digite a classificação, pressione enter e ele fornecerá a saída.
Okx,

Você pode largar o www.?
Shaggy

@ Shaggy Infelizmente não.
Okx 27/09/17

Talvez você possa apenas postar uma captura de tela dele em execução?

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)

Eu realmente gosto desta resposta.

6

JavaScript (ES6), 167 162 159 bytes

Precisa ser executado a partir da raiz do rottentomatoes.com . Retorna um Promiseobjeto que contém o 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)

Se podemos exigir que ele seja executado em um diretório específico , ele se torna 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)

Seria ótimo se houvesse um clique e uma maneira de testar as respostas Javascript.

@Embembik: normalmente isso pode ser feito quando se trabalha com APIs, mas, neste caso, a política CORS da RT o impede. Obrigado pela aceitação, por sinal.
Shaggy

Hmm ... Acabei de perceber que há respostas mais curtas, mas não tenho energia / experiência para testar o código Stratos no momento. Se eu fizer, terei que mudar o aceite, desculpe.

@Lembik: Eu esperava que o Stratos conseguisse (até agora).
Shaggy

Oh, eu adicionei uma recompensa à outra pergunta achado-a-filme :)

3

Solicitações Python 2 +, 209 204 bytes

-5 bytes graças 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*

11
Pense que você pode precisar (t, t) onde você tem (r, r)
ElPedro

11
Você pode usar este link: http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all( https-> httpe soltar o www.) por alguns bytes salvos .

11
Você poderia mostrar um exemplo do seu código sendo usado, por favor.

2

q / kdb + , 168 bytes

Solução:

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

Exemplo:

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

Explicação:

.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:

  • Se você quiser fazer isso sozinho, leia a página Cookbook / SSL para garantir que seu ambiente esteja configurado corretamente.
  • Falha se removermos o sde https, ou o www., dá 301 Permanently Movedresposta.

Talvez adicione um link para "q / kdb +" no título da sua resposta? Muitas pessoas nunca ouviram falar disso e você pode educá-las (eu).

Concluído :) Esperava escrever uma solução em OK, mas está presente um cabeçalho 'Não' Acesso-Controle-Permitir-Origem '...' ao usar a repl on-line ( johnearnest.github.io/ok/index.html ), retornaram ao Q de código fechado.
streetster 26/09/17

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

Execute a partir da página inicial do 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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.