Göm meny

Introduktionsuppgift 3


I denna introuppgift ska ni skriva ett pythonskript som hämtar information från webben om hur många lediga datorer det finns i olika datorsalar på IDA och skriver ut denna information i terminalen på ett prydligt formatterat sätt.

Nyckebegrepp

  • HTTP GET
  • modul i python
  • dictionary
  • shellskript, skript

Inlärningsmål

  • förståelse av hur HTTP kan användas för att läsa information, samt begära information från webben.
  • användning av moduler
  • inläsning av JSON till dictionary
  • använding av dictionary
  • formattering av strängutskrifter

Redovisning

Introduktionsuppgiften redovisas muntligt vid redovisningstillfälle enligt deadlinesidan. Vid den muntliga redovisningen kommer du få göra följande:

  • Visa att du lyckats med uppgiften
  • Svara på några frågor om det du gjort och de nyckelbegrepp som tillhör introduktionsuppgiften. Dessa frågor kommer att vara tagna från de frågor som tillhör stegen nedan.

Komplettering

Om du av någon anledning inte kan närvara vid den muntliga redovisningen, kompletterar du genom att skicka in följande till 729g74@ida.liu.se

  • Skriftliga svar på alla frågor tillhörande introuppgift 3

Översikt

Denna introduktionsuppgift består av två deluppgifter:

  1. Hämta information om lediga datorer.
  2. Skriva ut information om lediga datorer i ett lättläst och prydligt format.

Instruktioner

Nedan följer detaljer om introduktionsuppgiftens två delar, samt frågor du ska kunna svara på kopplade till varje del. Se högerkolumnen för tips på söktermer!

Förberedelser: virtualenv

I introuppgiften kommer ni att använda paketet requests som tillhandahåller funktionalitet som gör det lättare att hämta information från webben. För att få tillgång till denna behöver ni aktivera en pythonmiljö som skapats för denna uppgift och som innehåller paketet requests.

Rent praktiskt innebär detta att ni innan ni kan köra ert skript, behöver ha skrivit

$ source ~729G74/kursmaterial/intro3/venv/bin/activate

Detta aktiverar pythonmiljön som behövs för introduppgiften där paketet requests finns tillgängligt.

Introuppgift 3, Del 1

I del 1 av denna introuppgift ska ni skriva ett pythonskript som hämtar information från webben om lediga datorer på IDA.

Uppgift 1.1: Den lever!

Skapa ett pythonskript som du kan köra från terminalen. Pythonskriptet ska bara skriva ut strängen "Jag lever!" och sen avslutas. Om ditt pythonskript är sparat i filen jaglever.py så ska ni alltså kunna skriva ./jaglever.py i terminalen med nednastående resultat:

$ ./jaglever.py
Jag lever!
$

Till din hjälp för att göra detta har du lite nödvändigt vetande i styckena nedan.

Uppgift 1.2: Hämta information från webben

I pythonskriptet ska du nu hämta innehållet från en eller båda nedanstående

Du kan klicka på länkarna ovan och se innehållet. Vilket format är information i? Läs vidare i “Nödvändigt vetande” nedan för information och tips om hur detta kan göras.

Om ovanstående URL:er: Informationen som visas på ovanstående URL:er är live (med viss fördröjning) och är samma information som används av skärmarna utanför Visionen.

Nödvändigt vetande: Exekverbar textfil

När vi befinner oss i en linux-miljö (som här på IDA) refererar termen “skript” ofta till en exekverbar textfil som innehåller kod som ska köras. För att veta vilken programtolk som ska användas av koden i filen används den första raden i filen för denna information. Nedan följer ett exempel:

#!/bin/bash

Ta reda på vad ovanstående betyder och vad som ska skrivas i en fil man vill köra som innehåller pythonkod.

Nödvändigt vetande: Få python att förstå när koden körs som ett skript

Man kan använda en textfil med pythonkod på olika sätt. Ett sätt är att köra den i terminalen. Ett annat sätt är att ladda in koden och använda den som en modul. För att kunna skilja på dessa två omständigheter har python en speciell variabel: __name__. Om innehållet i denna variabel är strängen "__main__" vet vi att vår kod är “huvudattraktionen” och inte en modul. Vi kan därför ha med ett villkor som säger att viss kod bara ska köras när vår kod körs som ett skript:

if __name__ == "__main__":
    main()

Ovanstående säger att om koden körs som ett skript, ska vi göra ett anrop till funktionen main(). I funktionen main() kan vi sedan lägga vår den kod som ska användas av själva skriptet.

Nödvändigt vetande: Paketet requests för att göra HTTP requests

Vi ska använda modulen requests för att hämta data från webben. Målet är att få in informationen från URL:en ovan in i skriptet. För att göra det måste vi kunna kommunicera med webbservern. Det är mycket som ska göras, men som tur är finns det paket som t.ex. requests som tar hand om den mesta logistiken och förenklar vårt arbete.

Läs dokumentationen på http://docs.python-requests.org/en/master/ och ta reda på hur du läser in data från någon av URL:erna ovan.

Som jämförelse kan du om du vill titta på hur man gör samma sak med endast standardpython: https://docs.python.org/3/howto/urllib2.html#urllib-howto

Del 2: Skriva ut informationen fint och prydligt

Uppgift 2.1: Konververa JSON data till ett dictionary

Konvertera informationen du hämtat från webben från JSON till information lagrat i ett dictionary. Läs vidare i “Nödvändig vetande” nedan.

Uppgift 2.2: Skriv ut nyckel och dess värde

När ni fått in data till ett dictionary kan ni undersöka detta genom att skriva ut alla dess nycklar och värden.

Uppgift 2.3: Formattera text

Sista uppgiften är att skriva ut informationen på ett fint sätt. Nedan är ett exempel:

LEDIGA DATORER
PC: 39/40 (98%)
SU: 146/152 (96%)
tot: 146/152 (96%)

PC1: 8/8
PC2: 8/8
PC3: 8/8
PC4: 7/8
PC5: 8/8
SU00: 10/8
SU01: 9/10
SU02: 10/10
SU03: 9/10
SU04: 15/16
SU10: 10/10
SU11: 9/10
SU12: 9/10
SU13: 10/10
SU14: 9/10
SU15: 23/24
SU17: 23/24

Nödvändigt vetande: JSON till dictionary

Informationen du hämtat ner är i JSON-format. Som tur är har requests-paketet en smidig metod för att avkoda information i JSON-format och returnera ett Python-dictionary med denna information.

Läs requests-sidan för att hitta hur.

Nödvändigt vetande: dictionary

Precis som strängar och listor har metoder i Python (t.ex. str.lower() eller list.append()), så har även dictionary tillhörande metoder för att både manipulera och hämta information från det när användning nycklar inte räcker till.

Nedan hittar du exempel på olika metoder. Exakt hur du använder dessa behöver du eventuellt slå upp.

  • dict.keys() kan användas för att få fram alla nycklar i ett dictionery.
  • dict.values() kan användas för att få fram alla värden som finns i ett dictionary.
  • dict.items() används för att få fram både nycklar och värden i ett dictionary.

Nödvändigt vetande: utskriftsformattering

Ni har skrivit ut text till terminalen tidigare med funktionen print(). Ni har också slagit ihop strängar med operatorn +. Man klarar sig väldigt bra med dessa verktyg, men för viss typ av formattering (t.ex. utskrift av siffervärden), tillhandahåller Python vertyg som underlättar.

Du kan läsa om strängmetoderna .format(), .rjust(), .ljust(), .center() och .zfill() som kan användas för att formattera strängar i Python-dokumentationen.

Frågor att kunna svara på efter introuppgift 3

  1. Hur gör man för att göra en textfil som innehåller pythonkod till ett exekverbart skript?
  2. Hur importerar man en modul?
  3. Vad är en HTTP GET request?

Sidansvarig: Jody Foo
Senast uppdaterad: 2017-10-27