To wyzwanie polegające na znalezieniu filmu

10

Jest to proste (ish) wyzwanie zeskrobywania sieci.

Wejście

Twój kod powinien przyjmować ocenę filmu MPAA i liczbę od 0 do 100 jako dane wejściowe. Może to zrobić w dowolny dogodny dla Ciebie sposób.

Wynik

Twój kod powinien zwracać nazwę każdego filmu, który ma a) ocenę tego filmu oraz b) wynik numeryczny na Tomatometrze od rottentomatoes .

Jeśli nie ma takiego filmu, może on wyświetlać wszystko, co lubisz.

Możliwe oceny filmów MPAA to G, PG, PG-13, R, NC-17, NR.

Twój kod może zgłaszać jeden lub więcej filmów, które zależą od Ciebie.

Aby to wyjaśnić, twój kod służy do uzyskiwania dostępu do Internetu w celu uzyskania odpowiedzi na zapytania.

Przykład

Powiedzmy, że dane wejściowe to „PG, 98”, a następnie kod może wypisać „Zootropolis”.

Pokaż przykład kodu współpracującego z oceną filmu PGi wynikiem 98wraz z odpowiedzią.


źródło
O_O NC-17 brzmi źle
Christopher
1
NC-17, w przeciwieństwie do innych, ma być nieodpowiedni. : P
totalnie ludzki,
Czy moja odpowiedź powinna zwrócić więcej niż jeden film?
BlackCap,
1
@BlackCap Edytowałem pytanie. To zależy od Ciebie.
Zootropolis czy Zootopia?
BlackCap

Odpowiedzi:

2

Stratos , 133 bajty

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

Spróbuj!

Okx
źródło
Czy możesz podać przykład użycia kodu?
@Lembik Cóż, uruchom go i wpisz numer, naciśnij enter, wpisz ocenę, naciśnij enter, a da ci wynik.
Okx,
Czy możesz upuścić www.?
Shaggy
@Shaggy Niestety nie.
Okx,
Może mógłbyś po prostu opublikować zrzut ekranu z jego działaniem?
12

Bash, 182 bajty

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

Stosowanie:

$ bash script PG 98
The Island President
Inside Out
Zootopia
Paddington
Love & Friendship
Long Way North (Tout en haut du monde)
Gajówka
źródło
Naprawdę podoba mi się ta odpowiedź.
6

JavaScript (ES6), 167 162 159 bajtów

Musi być uruchamiany z katalogu głównego rottentomatoes.com . Zwraca Promiseobiekt zawierający tytuł.

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)

Jeśli możemy wymagać, aby był uruchamiany w określonym katalogu, wówczas staje się 139 bajtów:

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)
Kudłaty
źródło
Byłoby wspaniale, gdyby istniało jedno kliknięcie i sposób na przetestowanie odpowiedzi Javascript.
@Lembik: normalnie można to zrobić podczas pracy z interfejsami API, ale w tym przypadku polityka RT CORS uniemożliwia. Nawiasem mówiąc, dziękuję za przyjęcie.
Shaggy
Hmm .. Właśnie zauważyłem, że są krótsze odpowiedzi, ale nie mam teraz energii / wiedzy, aby przetestować kod Stratos. Jeśli to zrobię, będę musiał zmienić akceptację, przepraszam.
@Lembik: W pełni spodziewałem się, że Stratos go zdobędzie (jak dotąd).
Shaggy
Och, dodałem nagrodę za inne pytanie o znalezienie filmu :)
3

Żądania w języku Python 2 +, 209 204 bajtów

-5 bajtów dzięki Ianowi Gödelowi.

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*
całkowicie ludzki
źródło
1
Myślisz, że możesz potrzebować (t, t) tam, gdzie masz (r, r)
ElPedro
1
Możesz użyć tego linku: http://rottentomatoes.com/api/private/v2.0/browse?minTomato=%d&maxTomato=%d&type=dvd-streaming-all( https-> httpi upuść www.) dla kilku zapisanych bajtów .
1
Czy możesz podać przykład użycia kodu?
2

q / kdb + , 168 bajtów

Rozwiązanie:

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

Przykład:

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

Wyjaśnienie:

.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

Uwagi:

  • Jeśli chcesz to wypróbować samodzielnie, przeczytaj stronę Cookbook / SSL, aby upewnić się, że środowisko jest poprawnie skonfigurowane.
  • Nie powiedzie się, jeśli usunąć sz httpslub www.daje 301 Permanently Movedodpowiedź.
streetster
źródło
Może dodać link do „q / kdb +” w tytule swojej odpowiedzi? Wiele osób nigdy o tym nie słyszało i możesz je edukować (ja).
Gotowe :) Miałem nadzieję napisać rozwiązanie w ok, ale otrzymuję nagłówek „Nie” Kontrola dostępu-Zezwalaj na pochodzenie ”jest obecny ...” podczas korzystania z replikacji online ( johnearnest.github.io/ok/index.html ), więc wróciłem do zamkniętego źródła Q.
streetster
2

JavaScript (ES2017), 158 bajtów

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

Uruchom ze strony głównej zgniłych pomidorów :

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)
darrylyeo
źródło