"AttributeError: __dict__"

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
Reddington
User
Beiträge: 3
Registriert: Donnerstag 27. August 2020, 14:36

Donnerstag 27. August 2020, 14:48

Hallo Zusammen, ich bin neu hier im Forum und neu im Umgang mit Python.

Ich erstelle mir gerade einen MagicMirror² (Raspberry Pi 3b+) und bin dabei diesen einzurichten.
Bei der Einrichtung bin ich auf ein Skript (https://www.ofbrooklyn.com/2014/01/2/bu ... -detector/) gestoßen um Fotos von Flickr zu downloaden bzw. ggfls. anzeigen zu lassen.

Nach anfänglichen Schwierigkeiten, schien es erst zu funktionieren, aber dem ist leider nicht so und ich weiß nicht weiter :(

Mein Code sieht aktuell wie folgt aus:

Code: Alles auswählen

import flickrapi

api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
api_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

flickr = flickrapi.FlickrAPI(api_key, api_secret)
photos = flickr.photos.search(user_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxx', per_page='10')
sets = flickr.photosets.getList(user_id='xxxxxxxxxxxxxxxxxxxxxxxxxxxx')

def make_url(photo):
    # url_template = "http://farm{farm-id}.staticflickr.com/
    #                 {server-id}/{id}_{secret}_[mstzb].jpg"
    photo['filename'] = "%(id)s_%(secret)s_z.jpg" % photo
    url = ("http://farm%(farm)s.staticflickr.com/%(server)s/%(filename)s"
           % photo)
    return url, photo['filename']

def main():
    print " ---> Requesting photos..."

flickr = flickrapi.FlickrAPI(api_key, api_secret)
photos = flickr.photos.search(user_id='189873846@N05', per_page='10')
sets = flickr.photosets.getList(user_id='189873846@N05')

for photo in photos:
        url, filename = make_url(photo.__dict__['attrib'])
        path = '/home/pi/photoframe/flickr/%s' % filename
        try:
            image_file = open(path)
            print " ---> Already have %s" % url
        except IOError:
            print " ---> Downloading %s" % url
            r = requests.get(url)
            image_file = open(path, 'w')
            image_file.write(r.content)
            image_file.close()

if __name__ == '__main__':
    main()
Führe ich nun aber diesen Code aus, bekomme ich folgende (Fehler)Meldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "flickr.py", line 26, in <module>
    url, filename = make_url(photo.__dict__['attrib'])
AttributeError: __dict__
Kann mir jemand weiterhelfen und mir verraten wo das Problem liegt bzw wie ich diese behoben bekomme? :/
__deets__
User
Beiträge: 8544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 27. August 2020, 15:41

Das Problem ist hier das gleiche wie im PI Forum, wo Tell dir schon gesagt hat, was die Ursache ist: das Modul der API hat dich weiterentwickelt, und darum passt der Code nicht mehr. Die Dokumentation der API kennst du auch, und darin steht auch, wie man auf die Bilder zugreift, um sie dann runter zu laden.
Benutzeravatar
__blackjack__
User
Beiträge: 6810
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 27. August 2020, 15:50

Wobei so ein direkter Zugriff auf `__dict__` an der Stelle komisch riecht, auch wenn er funktionieren würde.
long long ago; /* in a galaxy far far away */
__deets__
User
Beiträge: 8544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 27. August 2020, 15:56

Der ist denke ich auch nicht notwendig. Es gibt ja zb eine Anleitung in der API wie man mit einer Foto-ID an eine Short-URL kommt. Und die kann man dann ja benutzen.
Reddington
User
Beiträge: 3
Registriert: Donnerstag 27. August 2020, 14:36

Donnerstag 27. August 2020, 16:56

__deets__ hat geschrieben:
Donnerstag 27. August 2020, 15:41
Das Problem ist hier das gleiche wie im PI Forum, ........
Dieses Problem habe ich im Pi Forum nicht angesprochen ;) Dort habe ich nur von einem "anderen Problem" gesprochen ;)
Aber ich denke, da es Python betrifft, ist das "neue Problem" hier wohl besser aufgehoben.

Hätte ich vorher von dem Forum hier gewusst, hätte ich mein Anliegen direkt hier gestellt.



Dieser Fehler scheint wohl auch nur aufzutauchen, wenn ich die Bilder bei Flickr auf "privat" stelle, stelle ich diese auf "öffentlich" passiert nichts weiter.
In der Konsole steht dann nur "---> Requesting photos..." und das wars. Kein neuer Ordner, keine Bilder, nichts. :roll:
__deets__
User
Beiträge: 8544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 27. August 2020, 20:14

Das kannst du ja mit strategischen Ausgaben versuchen zu eruieren, was da passiert.
Reddington
User
Beiträge: 3
Registriert: Donnerstag 27. August 2020, 14:36

Montag 31. August 2020, 07:47

@ __deets__

Damit kann ich leider überhaupt nichts anfangen :/ Dafür bin ich noch zu neu um mit deiner Antwort weiterzukommen :(
Benutzeravatar
sparrow
User
Beiträge: 2131
Registriert: Freitag 17. April 2009, 10:28

Montag 31. August 2020, 08:03

@Reddington: Der Artikel, nach dem du vorgehst, ist 6 Jahre alt. Es ist sehr wahrscheinlich, dass sich das Modul und dessen Benutzung seitdem geändert hat. Da das auch sehr seltsam aussieht, hoffe ich das sogar.

- Benutzte kein Python 2.x mehr. Python 2 ist seit Anfang des Jahres tot. Es gibt keine Sicherheitsupdates oder ähnliches mehr.
- Ich würde mich umschauen, ob es eine Alternative zu dem von dir verwendeten "flickrapi"-Modul gibt. Offensichtlich ist die letzte Version auf PyPI auch schon 2,5 Jahre alt und für aktuelle Python 3 Versionen nicht freigegeben.
Antworten