These are chat archives for dbwebb-se/python

24th
Oct 2016
Christinefred
@Christinefred
Oct 24 2016 13:46
Jag förstår inte den här förklaringen i kmom06 ./marvin-cli.py --json --input=<file> seo betyder det att jag öppnar json filen och en annan fil? varför är det både --json och --input? Jag är förvirrad eftersom jag har satt json med sin egen VERBOSE.
AndreasArne
@AndreasArne
Oct 24 2016 13:47
@Christinefred "--json" säger oss att utskriften ska vara i json-format
"--input=<ersätt detta med en fil>" säger att du ska köra seo på innehållet i den filen och inte en hemsida
filen ska innehålla koden för en hemsida
Christinefred
@Christinefred
Oct 24 2016 13:48
Då betyder det att det räcker med --input=<fil> i inspektorn och inte --json också
AndreasArne
@AndreasArne
Oct 24 2016 13:49
ditt program ska klara av båda
Christinefred
@Christinefred
Oct 24 2016 13:50
på samma rad --json --input=<fil>
AndreasArne
@AndreasArne
Oct 24 2016 13:50
vet inte om jag hänger med på vad du undrar
du ska kunna starta ditt program med "./marvin-cli.py --json --input=<file> seo"
Christinefred
@Christinefred
Oct 24 2016 13:51
Nu om jag skriver i inspektorn --json=report.json seo
så får jag min json utskrift
AndreasArne
@AndreasArne
Oct 24 2016 13:52
--json ska inte ha något argument
Christinefred
@Christinefred
Oct 24 2016 13:52
Eller ska jag sätta det till --input=report.json . Jag förstår inte hur jag får till båda på samma gång ./marvin-cli.py --json --input=<file> seo?
Så bara --input=<file> seo
AndreasArne
@AndreasArne
Oct 24 2016 13:53
--json är ett option som säger till ditt program att du vill att resultatet ska vara i json-format och "--input=<fil>" säger att du ska göra seo på innehållet i den filen
Christinefred
@Christinefred
Oct 24 2016 13:54
Jag har det så här elif opt in ("--json"):
JASON = arg
if VERBOSE:
print("Setting JASON to", JASON)
AndreasArne
@AndreasArne
Oct 24 2016 13:54
jag hade satt JASON = True
i och med att du inte skickar med något arg till json
Christinefred
@Christinefred
Oct 24 2016 13:55
och VERBOSE till INPUT?
AndreasArne
@AndreasArne
Oct 24 2016 13:55
sen när du gör din seo så får du kolla om JASON == true
VERBOSE är sitt egna option som inte har med json eller input å göra
Christinefred
@Christinefred
Oct 24 2016 13:56
Ok jag ska försöka
AndreasArne
@AndreasArne
Oct 24 2016 13:56
du får göra en liknande elif som du har för json där du kollar om --input är satt och få får du spara undan filnamnet från arg någonstans så du kan använda den sen när du kör seo
Christinefred
@Christinefred
Oct 24 2016 13:59
Jag ska försöka förstå det men provade att använda INPUT.
AndreasArne
@AndreasArne
Oct 24 2016 14:00
När du ska göra krav nio hade jag byggt upp så du först kan köra "seo <url>"
Christinefred
@Christinefred
Oct 24 2016 14:00
Det funkar
AndreasArne
@AndreasArne
Oct 24 2016 14:00
när det funkar lägg på "--json seo <url>" så du kan säga att utskriften ska var i json format
danijoha
@danijoha
Oct 24 2016 14:00
@Christinefred Optioner är till för att kunna ändra beteendet med lite olika inställningar innan programmet kör igång med sin huvuduppgift. Huvuduppgiften just här är ju att göra en SEO-rapport. Optioner som --json, --input, --verbose etc styr bara hur den uppgiften ska göras.
Christinefred
@Christinefred
Oct 24 2016 14:01
DEn här funkar python3 ./marvin-cli.py --json seo https://dbwebb.se/material
AndreasArne
@AndreasArne
Oct 24 2016 14:02
Då är ju nästa att du ska kunna köra "--input=<fil> seo"
vilket är samma sak som seo <url>
fast du kör seo funktionerna på innehållet som finns i filen du skriver
Christinefred
@Christinefred
Oct 24 2016 14:02
Men det står ju --json --input<fil> seo
AndreasArne
@AndreasArne
Oct 24 2016 14:03
det är nästa steg
Christinefred
@Christinefred
Oct 24 2016 14:03
Den här den här funkar python3 marvin3.py --input=findTitle.txt seo
AndreasArne
@AndreasArne
Oct 24 2016 14:03
ok
hur ser din utskrift ut när du kör "seo <url>" och "--json seo <url>"?
Christinefred
@Christinefred
Oct 24 2016 14:04
Jag kommer tillbaks om 20 minuter
AndreasArne
@AndreasArne
Oct 24 2016 14:04
ok
Christinefred
@Christinefred
Oct 24 2016 14:37
Förlåt jag var tvungen att gå iväg. Det säger så här python3 marvin3.py --json --input=report.txt seo
Script executed in 0.66 seconds
inget utskrift
AndreasArne
@AndreasArne
Oct 24 2016 14:39
vad får du för output med --input=report.txt?
innehåller report.txt html kod för en hemsida?
Christinefred
@Christinefred
Oct 24 2016 14:41
jag gav fel kod python3 marvin3.py --input=report.json seo python3 marvin3.py --json --input=report.json seo
Traceback (most recent call last):
File "marvin3.py", line 311, in <module>
main()
File "marvin3.py", line 303, in main
parseOptions()
File "marvin3.py", line 288, in parseOptions
analyzeWebpage()
File "marvin3.py", line 209, in analyzeWebpage
jsonfile = open(INPUT, "r")
TypeError: invalid file: None
Det här är svaret
Om jag ändrar koden och lägger in addressen funkar det jsonfile = open("report.json", "r")
AndreasArne
@AndreasArne
Oct 24 2016 14:43
jag måste gå nu, tyvärr men jag kommer in senare ikväll igen. Men om du snabbt slänger upp en codeshare på din kod över options parse så kanske jag kan se om det är något där
Christinefred
@Christinefred
Oct 24 2016 14:44
Men jag tror inte att jag kan lägga in länken
AndreasArne
@AndreasArne
Oct 24 2016 14:44
till vad?
Christinefred
@Christinefred
Oct 24 2016 14:44
report.json i open(
AndreasArne
@AndreasArne
Oct 24 2016 14:45
tänkte bara kolla på din kod
Christinefred
@Christinefred
Oct 24 2016 14:45
Det är sista deln av min sida jag bara kollar den här delen
resten med url parameter har jag för tillfället på en annan fil
AndreasArne
@AndreasArne
Oct 24 2016 14:47
rad 98 ska bort
du ska ändast sätte input där du kollar om input är med skickat
har inte med json att göra
Christinefred
@Christinefred
Oct 24 2016 14:48
ok ska ta bort den
Funkar inte
AndreasArne
@AndreasArne
Oct 24 2016 14:49
ok men jag måste gå nu
Christinefred
@Christinefred
Oct 24 2016 14:49
Tack för hjälpen
AndreasArne
@AndreasArne
Oct 24 2016 14:49
kommer in ikväll igen och kollar om du har lyckats lösa det
Christinefred
@Christinefred
Oct 24 2016 14:49
ses
danijoha
@danijoha
Oct 24 2016 14:50
@Christinefred Du får väl göra färdigt ändringen du nyss gjorde. Den ska ju inte skriva ut INPUT där heller utan variabeln JASON.
rad 100
Christinefred
@Christinefred
Oct 24 2016 14:53
Jag ändrade till jASON nu men då kommer title utskriften ut
danijoha
@danijoha
Oct 24 2016 14:54
@Christinefred Din funktion analyzeWebpage är även skriven på ett sätt så att bara en av --json eller --input kan vara angivna bl a pga den elif JASON == True: som finns där.
@Christinefred är din codeshare uppdaterad med dina senaste ändringar?
Christinefred
@Christinefred
Oct 24 2016 14:56
Jag gjore det nu
danijoha
@danijoha
Oct 24 2016 15:02
@Christinefred Din funktion analyzeWebPage behöver som sagt kunna hantera både JASON och INPUT samtidigt. Nu är funktionaliteten där uppdelad så att den bara kan hantera fallen separat. Om du gör så att du delar upp koden så att den först tar reda på informationen (här har INPUT betydelse men inte JASON) och sedan i nästa del konstruerar en rapport utifrån informationen du just samlat in (här har JASON betydelse men inte INPUT).
Då kan du i samma kod stödja bägge optionerna.
Christinefred
@Christinefred
Oct 24 2016 15:05
Jag försökte med det här if INPUT and not JASON
danijoha
@danijoha
Oct 24 2016 15:05
Det kommer inte att räcka att bara ändra en rad.
Christinefred
@Christinefred
Oct 24 2016 15:06
och det här elif JASON and not INPUT:
danijoha
@danijoha
Oct 24 2016 15:06
Du behöver åtminstone även hantera fallet (INPUT and JASON)
Christinefred
@Christinefred
Oct 24 2016 15:08
men det gick inte jag får det här svaret python3 marvin3.py --input=report.json seo
Setting INPUT to report.json
There is 0 <h1> tag
There is 0 <h2> tag
There are 4 <a> tags
Script executed in 0.681 seconds
danijoha
@danijoha
Oct 24 2016 15:08
Poängen är att istället för att fläta ihop optionerna INPUT och JASON bör du snarare hantera varje option separat utan inblandning av de andra så långt det går. Annars slutar det med att man får väldigt många kombinationer av olika optioner och till slut blir programmet gigantiskt.
Kod som inte är specifik för en viss en option bör vara gemensam. Man bör även sträva efter bara göra en viss sak på ett ställe dvs man ska försöka att inte upprepa sig. (principen "DRY" (Don't Repeat Yourself))
Christinefred
@Christinefred
Oct 24 2016 15:16
Jag la den i en egen funktion och det här är svaret Setting INPUT to report.json
Script executed in 0.133 seconds
danijoha
@danijoha
Oct 24 2016 15:24
@Christinefred Såg en annan sak: Har du gjort övningarna med modulen BeautifulSoap? Om du hade använt BeautifulSoap i din kod för att extrahera ut informationen från HTML-sidan, tror jag att det hade gjort koden både enklare, kortare och mer tillförlitlig.
Christinefred
@Christinefred
Oct 24 2016 15:25
Jag använde BeutifulSoap
req = requests.get(url)
soup = BeautifulSoup(req.text, "html.parser")
soup.title.string = "".join(line.strip() for line in soup.title.string.split())
print("\nThere are", len(soup.title.string), "characters in the <title> tag")
    count = 0
    tags = soup('h1')
    for tag in tags:
        if tag in tags:
            count = count + 1
    print('There is', count, "<h1> tag")
    count = 0
    tags = soup('h2')
    for tag in tags:
        count = count + 1
    print('There is', count, "<h2> tag")
    count = 0
    tags = soup('a')
    for tag in tags:
        count = count + 1
    print('There are', count, "<a> tags\n")
danijoha
@danijoha
Oct 24 2016 15:27
@Christinefred Din funktion analyzeWebPage ser ut att göra ingenting i fallet (JASON and INPUT).
@Christinefred Ok så du hade bara utelämnat de bitarna från din exempelkod i codesharen då?
Christinefred
@Christinefred
Oct 24 2016 15:28
Nej det händer ingenting och jag ger nästan upp
Jag tog ut koden för json för att inte förstöra vad som fungerar i oginal filen
i en ny test fil
Jag ändrade och satte in INPUT bara python3 marvin3.py --input=report.json seo
Då fungerar det. Men --json + --input?
danijoha
@danijoha
Oct 24 2016 15:33
Du behöver iaf även hantera fallet JASON and INPUT i funktionen analyzeWebpage. Det är det som saknas. Det är därför inget händer i det fallet såvitt jag förstår. Den kommer ju till if och elif och ingen av dem blir sann så ingen av dem körs.
Christinefred
@Christinefred
Oct 24 2016 15:33
Ska försöka
danijoha
@danijoha
Oct 24 2016 15:55
@Christinefred Det bästa vore om du delar upp koden i analyzeWebPage så att den först tar reda på analysinformationen (här har bara optionen INPUT betydelse för om den ska analysera HTML från en URL eller HTML från en fil) och sedan i steget därefter konstruerar en rapport utifrån den analysinformation du just samlat in (här har bara optionen JASON betydelse beroende på om den ska printa ut strängen i form av en JSON rapport eller en vanlig rapport). Då kan samma funktion stödja bägge optionerna som sagt.
Christinefred
@Christinefred
Oct 24 2016 15:57
Tack jag ska kika på det imorgon eller senare för nu gav jag upp.
Christinefred
@Christinefred
Oct 24 2016 18:39
Jag har klarat av att få -./marvin-cli.py --input=<file> seo
./marvin-cli.py --json --input=<file> seo att skriva ut tiltel och json rapport, men jag förstår inte vad ./marvin-cli.py seo <url>
./marvin-cli.py --json seo <url> ska skriva ut. Ska den första skriva ut titel och räkna antalet taggar och den andra både titel och json rapporten?
Jag menar den här ./marvin-cli.py --json seo <url> eftersom rapporten är i en fil. Eller ska jag ta ut den från min dbwebbrapport?
danijoha
@danijoha
Oct 24 2016 18:43
@Christinefred Som jag förstod det så ska väl även den skrivas till skärmen med print, men det är möjligt att jag minns fel.
Christinefred
@Christinefred
Oct 24 2016 18:43
Den skrivs ju ut med ./marvin-cli.py --json --input=<file> seo
danijoha
@danijoha
Oct 24 2016 18:46
@Christinefred Hur menar du? <file> är ju en HTML-fil som du analyserar. Om url används istället för --input så analyserar du ju HTML som hämtas via url:en istället.
Christinefred
@Christinefred
Oct 24 2016 18:48
men varför är det --json det är ju inte url
danijoha
@danijoha
Oct 24 2016 18:49
Resultatet av analysen ska printas som JSON ifall man väljer --json.
Så tolkade jag det iaf.
Christinefred
@Christinefred
Oct 24 2016 18:51
Men det finns inte på webben?
danijoha
@danijoha
Oct 24 2016 18:51
Vilket då?
Christinefred
@Christinefred
Oct 24 2016 19:40
Tack, jaag förstod det hämta en json fil från dbwebb. Godnatt och må så gott
Allinrep
@pejg12
Oct 24 2016 20:38
@Christinefred Nej, uppgiften är inte att hämta en json-fil.
@Christinefred ./marvin-cli.py seo <url> ska resultera i en rapport. Rapporten skrivs ut direkt till terminalen med print().
Allinrep
@pejg12
Oct 24 2016 20:47
./marvin-cli.py --json seo <url> kan använda nästan exakt samma kod som det ovan, men istället för print() kan du använda json.dumps() för att skriva till terminalen. Du ska varken öppna från eller skriva till en fil. Json är inte ett fil-format, det är en uppsättning regler för hur information kan presenteras (som liknar pythons typer väldigt mycket).
./marvin-cli.py --input=<file> seo ska skriva ut sin rapport med print() precis som det första kommandot, men istället för att hämta html-koden från en url så hämtar den html-kod från en fil. Du kan hämta html-kod med ./marvin-cli.py --output=<file> get <url> (uppgift 6) så att du får en fil som du kan använda till den här uppgiften.
Och finalen: ./marvin-cli.py --json --input=<file> seo Resultatet ska skrivas ut till terminalen med json.dumps() och analysera html-kod från en fil istället för en url.
Allinrep
@pejg12
Oct 24 2016 20:53
@Christinefred inputpåverkar vilken källa du analyserar: en webburl eller en htmlfil. Sen analyserar du. json påverkar hur du skriver ut informationen till terminalen: print() eller json.dumps(). Den ena påverkar vad du gör i början av funktionen, den andra påverkar vad du gör i slutet av funktionen, så de bör inte ingå i samma if-else-sats alls.