Technologia Internetowe - Ćwiczenia 3


Poprzednie Następne
Temat: Przesyłanie danych w Internecie.

Tematy na dziś

Materiały

Zadania do realizacji na zajęciach

Zadanie 1 - cURL / JSON

  1. Wyślij żądanie cURL do strony http://jsonplaceholder.typicode.com/posts/1. Jak wygląda otrzymanny wynik? Czym różni się od danych w (znanym ze wstępu do informatyki) formacie XML?

    $ curl 'http://jsonplaceholder.typicode.com/posts/1'

Zadanie 2 - cURL / JSON /XML

  1. Przyjrzyj się API strony poznan.pl

    http://www.poznan.pl/api/
  2. Za pomocą narzędzia cURL uzyskaj z API strony poznan.pl informację o wydarzeniach w formacie XML.

    $ curl 'http://www.poznan.pl/mim/public/ws-information/?co=getCurrentDayEvents'
  3. Za pomocą narzędzia cURL uzyskaj z API strony poznan.pl spis ulic w formacie JSON

    $ curl 'http://www.poznan.pl/featureserver/featureserver.cgi/ulice/all.json'
  4. Ogranicz poprzednie wywołanie do 100 pierwszych ulic

    $ curl 'http://www.poznan.pl/featureserver/featureserver.cgi/ulice/all.json?maxFeatures=100'

    Jeśli chcesz zobaczyć zwrócony JSON ze 100 ulicami w Poznaniu w bardziej czytelnej formie, możesz użyć polecenia jq:

    $ curl 'http://www.poznan.pl/featureserver/featureserver.cgi/ulice/all.json?maxFeatures=100' | jq
  5. Program jq to potężne narzędzie, można go użyć do przeszukiwania i filtrowania danych w formacie JSON. Przykładowo lista nazw ulic może zostać zbudowana w następujący sposób

    $ curl 'http://www.poznan.pl/featureserver/featureserver.cgi/ulice/all.json' | jq '.features[].properties.a3'

Zadanie 3 - cURL & JQ

  1. Przejrzyj API na stronie

    https://openweathermap.org/api

    Jakie dane i w jakim formacie możesz na tej stronie uzyskać?

  2. Zarejestruj się na stronie

    https://openweathermap.org/api

    Pobierz prywatny klucz.

  3. Za pomocą narzędzia cURL uzyskaj ze strony https://openweathermap.org/ pogodę w mieście o pierwszej literze takiej, jak pierwsza litera Twojego nazwiska.

Zadania zaliczeniowe

Podstawowe

Zadania podstawowe sprawdzane są automatycznie, stąd ważne jest wysłanie na odpowiedni adres i zachowanie wskazanego formatu.

Wyniki zadań dostępne są w pliku tekstowym pod adresem http://kino.vm.wmi.amu.edu.pl/dtin/######.txt, gdzie ###### to sześciocyfrowy numer indeksu.

Zadanie 4.1 - Faktoryzacja numeru indeksu

Wyślij na http://kino.vm.wmi.amu.edu.pl:6080/dtin/z4.1/######, gdzie ###### to sześciocyfrowy numer indeksu, żądanie PUT zawierające w treści plik JSON, dla którego poniższe zapytanie jq zwróci sumę czynników pierwszych numeru indeksu (przykładowo dla liczby \(60=2\cdot 2\cdot 3\cdot 5\), wynikiem powinno byc 12):

[.factors[].value] | add

Nie zapomnij ustalić poprawnego nagłówka Content-Type.

Zadanie 4.2 i 4.3 - Filtry jq

Wyślij na http://kino.vm.wmi.amu.edu.pl:6080/dtin/z4.2/###### lub http://kino.vm.wmi.amu.edu.pl:6080/dtin/z4.3/######, gdzie ###### to sześciocyfrowy numer indeksu, żądanie POST zawierające w treści filtr jq, który dla zadanych plików zwróci odpowiednie odpowiedzi.

Opis struktury pliku

Wejściowy plik JSON przedstawia historię pewnych zdarzeń (block) i historię wartości pewnego parametru (hashrate). Jego ogólna struktura jest następująca:

{
   "blockHistory": [1519739287, 1519739455, 1519739710 ...],
   "hashrateHistory": [
      {
         "hr": 105355000000,
         "time": 1519739200
      },
      {
         "hr":104900000000,
         "time":1519739600
      }
      ...
   ]
}

Zarówno wartości w tablicy blockHistory jak i atrybutu time podawane są jako czas uniksowy, tj. jako liczbę sekund od początku 1970 roku.

Plik testowy

Zadanie będzie sprawdzane na następującym pliku.

Oczekiwany wynik działania filtra:

Zadanie 4.2 - Manipulowanie obiektami

Dla pliku wejściowego chcemy uzyskać wspólną historię wartości hashrate i bloków posortowaną chronologicznie. Plik wynikowy ma mieć następujacą strukturę:

[
   {
      "time": 1519739200,
      "type": "hr",
   },
   {
      "time": 1519739287,
      "type": "block"
   },
   {
      "time": 1519739455,
      "type": "block"
   },
   {
      "time": 1519739600,
      "type": "hr"
   },
   {
      "time": 1519739710,
      "type": "block",
   },
   ...
]
Zadanie 4.3 - Zaawansowane jq - zmienne i funkcje

Dla pliku wejściowego chcemy uzyskać informację o wartości parametru hashrate odnotowanej bezpośrednio przed każdym zdarzeniem, posortowaną chronologicznie. Plik wynikowy ma mieć następujacą strukturę:

[
   {
      "lastHr": 105355000000,
      "time": 1519739287
   },
   {
      "lastHr": 105355000000,
      "time": 1519739455
   },
   {
      "lastHr": 104900000000,
      "time": 1519739710
   },
   ...
]
Wskazówki

Dodatkowe

Zadanie D 4 - Web crawler

Napisz prostego Robota internetowego (ang. Web Crawler), który dla zadanej strony tematu na Wikipedii, wyświetli listę wszystkich tematów z sekcji See also. Przeszukiwanie ma być wykonywane rekurencyjnie.

Przykładowo dla hasła https://en.wikipedia.org/wiki/Online_chat, oprócz tematów bezpośrednio zawartych w See also takich jak: https://en.wikipedia.org/wiki/Chat_room czy https://en.wikipedia.org/wiki/Instant_messaging w wynikach powinny znaleźć się też tematy See also tych tematów (i tak dalej) przykładowo: https://en.wikipedia.org/wiki/Social_media czy https://en.wikipedia.org/wiki/Media_psychology.

Rozwiązania zadań dodatkowych

Rozwiązania zadań dodatkowych można wysłać na adres prowadzącego: rmiw@amu.edu.pl