COOP Medmera mer

Rätt svar där är nog snarare att köra



export LC_ALL=C

export LANG=C



i sitt skal.



Tyvärr tycker jag att allt som tar hänsyn till locale i skalet allt som oftast misslyckas rätt duktigt på olika sätt. För att inte tala om allt som fortfarande inte fixar UTF-8. *SUCK* Nu fick jag huvudvärk...
 
Jakob Österberg skrev:Hm, testa att ändra sv_SE.utf8 till sv_SE.utf-8 i filen, kanske kan fungera.Klicka för att utvidga...
Tackar! Mitt resultat var inte så mycket att klaga på.



2015-03-14: Köp för 508 saknar motsvarande poäng!

2015-03-20: Köp för 291 saknar motsvarande poäng!

2015-05-04: Köp för 25 saknar motsvarande poäng!

2015-05-31: Köp för 30 saknar motsvarande poäng!
 
Kan konstatera att ersättningskort inte ger några poäng samt att mha321 troligen har mina COOP-kontouppgifter data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
 
Har efter manuell genomgång hittat en styck Betalo- och en Klarnabetalning som inte renderat poäng. Joinar gänget som hoppas på en windows-förpackad version av @mha321's eminenta hjälpreda! data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
 
jonten skrev:Mac får följande fel, vad missar jag?Traceback (most recent call last):



File "desktop/coopverify.py", line 11, in <module>



import simplejson as json



ImportError: No module named simplejson
Klicka för att utvidga...
För andra som eventuellt råkar ut för den.. Om man inte har en väldigt gammal python (vilket de flesta inte har..), så byt ut rad 11 från


import simplejson as jsonKlicka för att utvidga...
mot


import jsonKlicka för att utvidga...
 
Tänkte jag trots allt skulle testa. Men får följande fel





Kod:


Traceback (most recent call last):
File "coopverify.py", line 39, in <module>
locale.setlocale(locale.LC_TIME, 'sv_SE.utf8')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting



Ändrar jag till utf-8 som verkar fungera för jonten får jag



Kod:


File "coopverify.py", line 39
locale.setlocale(locale.LC_TIME, 'sv_SE.utf-8’)
^
SyntaxError: EOL while scanning string literal
 
Förstår mig inte på detta.

Har aldrig jobbat med terminalen på min Mac.

Kan någon här eller via dm förklara för mig steg för steg hur jag ska bära mig åt för att få detta script att fungera?

Har en MacBook Pro från ca 2010 OSX Yosemite 10.10.4.

Om det nu spelar någon roll i sammanhanget...



Vill så gärna klura ut det själv men är rädd att jag ställer till mer än gör rätt.



Edit: Får en hel del "Command not found"



Edit: Till exempel...



pts = g_points[k]

-bash: pts: command not found
 
JPMorgan skrev:Ändrar jag till utf-8 som verkar fungera för jonten får jagKod:File "coopverify.py", line 39
locale.setlocale(locale.LC_TIME, 'sv_SE.utf-8’)
^
SyntaxError: EOL while scanning string literalKlicka för att utvidga...


Problemet är att det före sv_SE.utf-8 är ett rakt enkelt citattecken ('), men efter ett snett (). Ändra genom att kopiera det första citattecknet och ersätt det andra så ska det funka!
 
JPMorgan skrev:Tänkte jag trots allt skulle testa. Men får följande felKod:Traceback (most recent call last):
File "coopverify.py", line 39, in <module>
locale.setlocale(locale.LC_TIME, 'sv_SE.utf8')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale settingÄndrar jag till utf-8 som verkar fungera för jonten får jagKod:File "coopverify.py", line 39
locale.setlocale(locale.LC_TIME, 'sv_SE.utf-8’)
^
SyntaxError: EOL while scanning string literalKlicka för att utvidga...


Jag fick också det här felet och lyckades lokalisera det till en felaktig markör(? rätta gärna med rätt term!) i ovanstående kod. Använd istället följande så bör det fungera:





Kod:


'sv_SE.utf-8'
 
Tack för det! Nu kom nästa fel när jag lyckas logga in.





Kod:


Loggar in...
Laddar 2015-1
Traceback (most recent call last):
File "coopverify.py", line 118, in <module>
xact.extend([{'sum':r['sum'], 'loc': r['location'], 'date': datetime.strptime(r['date'], '%d %B %Y').date()} for r in jxact['d']['model']['results'] if int(r['sum']) < 0 and not r['title'].startswith('Uttag ')])
TypeError: 'NoneType' object has no attribute '__getitem__'





Kod:


Loggar in...
Laddar 2015-7
... sida 2
Traceback (most recent call last):
File "coopverify.py", line 118, in <module>
xact.extend([{'sum':r['sum'], 'loc': r['location'], 'date': datetime.strptime(r['date'], '%d %B %Y').date()} for r in jxact['d']['model']['results'] if int(r['sum']) < 0 and not r['title'].startswith('Uttag ')])
TypeError: 'NoneType' object has no attribute '__getitem__'
 
Inget komplett Windows-paket, men så här gjorde jag för att köra scriptet på Windows7 (svensk):



1. Installera Python 2.7.10 här (OBS! Hämta inte ner senaste Python, version 3.x, då fungerar inte scriptet utan konvertering)

2. Spara ner detta script i installationskatalogen (normalt c:\Python27)

3. Ställ dig i c:\Python27 i en kommandoprompt och skriv "python ez_setup.py"

4. Ställ dig i c:\Python27\scripts och skriv "easy_install simplejson"

5. Spara ner scriptet från @mha321 i en fil som du döper till coopverify.py i katalogen c:\Python27

6. Ändra rad 39 från "locale.setlocale(locale.LC_TIME, 'sv_SE.utf8')" till "locale.setlocale(locale.LC_ALL, 'sve')"

7. Ändra rad 2 från "# coding=utf8" till "# coding=utf-8"

8. Ställ dig i c:\Python27 och skriv "python coopverify.py <mailadress> <startmånad> <slutmånad>"



Det ska tilläggas att jag aldrig någonsin jobbat med Python så detta kan vara helt fel, men det fungerar bra för mig data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
 
En liten kommentar till den output man erhåller, som kan vara bra att hålla i minnet:



Köp på Coop som ger dubbla poäng resulterar i att matchningen spricker, men det ser man lätt på att man har två notifieringar samma dag.



Ränta, t.ex. för kontantuttag visas som saknade poäng.
 
RickardG skrev:6. Ändra rad 39 från "locale.setlocale(locale.LC_TIME, 'sv_SE.utf8')" till "locale.setlocale(locale.LC_ALL, 'sve')"Klicka för att utvidga...


Det där känns helt galet. Locale "sve" kanske finns i Python, men det är absolut inget jag skulle rekommendera. Korrekta locale-strängen är sv_SE.UTF-8 och inget annat. Den borde fungera tycker jag, men jag har inte haft möjlighet att labba med detta själv än.
 
Jag testade (bland mycket annat, sv_SE.UTF-8) men det ger unsupported locale setting. Efter lite googlande stod det klart att just Windows 7 och Windows 8 har en helt annan uppfattning om locale settings och att det var denna man skulle gå efter: Language Strings

Men som sagt, Python är inte min grej och jag kanske hade tur som fick det att hoppa igång!
 
RickardG skrev:Efter lite googlande stod det klart att just Windows 7 och Windows 8 har en helt annan uppfattning om locale settingsKlicka för att utvidga...
Windows brukar ha en annan uppfattning om det mesta... data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
 
JPMorgan skrev:Tänkte jag trots allt skulle testa. Men får följande felKod:Traceback (most recent call last):
File "coopverify.py", line 39, in <module>
locale.setlocale(locale.LC_TIME, 'sv_SE.utf8')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/locale.py", line 579, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale settingÄndrar jag till utf-8 som verkar fungera för jonten får jagKod:File "coopverify.py", line 39
locale.setlocale(locale.LC_TIME, 'sv_SE.utf-8’)
^
SyntaxError: EOL while scanning string literalKlicka för att utvidga...
Du har fel typ av ' i slutet på raden. Du har fått in en "kursiv" sådan...
 
agehall skrev:Det där känns helt galet. Locale "sve" kanske finns i Python, men det är absolut inget jag skulle rekommendera. Korrekta locale-strängen är sv_SE.UTF-8 och inget annat. Den borde fungera tycker jag, men jag har inte haft möjlighet att labba med detta själv än.Klicka för att utvidga...
Den skiter fullständigt i det där, och kör på det man har inställt i sin Windows-miljö när inget matchar, om jag inte minns fel. Och det heter olika saker beroende på vilken delmiljö i Windows man är på..



Vore antagligen enklare att bara stoppa in namnen på de svenska månaderna i en array - det enda som locale används för är date-parsing.
 
För mig sprack det på datum-matchningen om jag kommenterade bort raden helt, men det kanske inte var så du menade?
 
Faktum är att det var väldigt enkelt gjort så det är fixat. Ny version som inte använder locale längre, eftersom det verkar vara det som ställer till det för folk mest. Den använder inte heller simplejson (men kräver i gengäld Python 2.7 tror jag - men det har nog alla vid det här laget).



coopverify.py · GitHub



För de som bara vill ladda ner direkt, och inte bryr sig om att inspektera koden, så använd länken https://gist.githubusercontent.com/...e64e1224367bf815349e2271bca66dc/coopverify.py och gör "spara som" på den direkt.





Edit: detta borde betyda att steg 2, 3, 4, 6 och 7 utgår ur @RickardG's instruktioner.
 
Jag får fortfarande.





Kod:


Loggar in...
Laddar 2015-1
Traceback (most recent call last):
File "coopverify.py", line 138, in <module>
xact.extend([{'sum':r['sum'], 'loc': r['location'], 'date': parse_date(r['date'])} for r in jxact['d']['model']['results'] if int(r['sum']) < 0 and not r['title'].startswith('Uttag ')])
TypeError: 'NoneType' object has no attribute '__getitem__'
 
Back
Top