Twitter/Facebook/...-client - mit Python?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Hallo python-forum.de-Community!
Zunächst einmal möchte ich mich kurz vorstellen, ich heiße L3viathan2142, bin 17 Jahre alt und Schüler. Ich programmiere, seit ich 12 bin, allerdings nie mit Python: Begonnen habe ich mit C++, bin dort allerdings nicht weit gekommen, habe dann HTML, Javascript, VBS, CSS, PHP, ein bisschen VB und Java gelernt. Die letzten ein bis zwei Jahre habe ich mich hauptsächlich mit der Windows-only Scriptsprache AutoIt beschäftigt, ich bin aktives Mitglied des AutoIt.de-Forums.
Vor einiger Zeit kam mir die Idee, ein Internet-bündelndes Tool zu schreiben, welches mir Facebook- und Twitterstatusupdates sowie per IMAP neue Mails anzeigt, möglicherweise erweiterbar mit anderen Portalen.
Ich habe das zunächst mit AutoIt versucht, mir dazu cURL heruntergeladen, jedoch habe ich keine vernünftige Downloadquelle für curl inkl. dlls gefunden.
Also habe ich in der Twitterdokumentation nach Bibliotheken gesucht und python-twitter gefunden.
Mittlerweile habe ich schon mit Hilfe des Tutorials ein Statusupdate hingekriegt.
Fragen:
Ist Python die richtige Sprache für sowas?
Vorteile sehe ich in der Platformunabhängigkeit. Nachteil für mich ist natürlich, dass ich mit Python nicht vertraut bin, außerdem ist mir Platformunabhängigkeit momentan eh nicht so wichtig.
Besteht die Möglichkeit, eine Python-App als exe zu verpacken? Besonders diese Funktion gefällt mir bei Autoit. Ansonsten müsste ich ja benötigte Bibliotheken bei einem Setup mitinstallieren lassen...
Bemerkungen: Ich habe Boardsuche sowie Google benutzt, habe aber fast nichts brauchbares gefunden. Außerdem präferiere ich menschliche Hilfe, wenn möglich.
Fehlen noch weitere Fakten? Habt ihr Fragen? Bitte fragt.

Gruß, L3viathan2142
Zuletzt geändert von L3viathan2142 am Montag 27. Juli 2009, 14:49, insgesamt 2-mal geändert.
glaslos
User
Beiträge: 23
Registriert: Donnerstag 12. Februar 2009, 18:55
Kontaktdaten:

L3viathan2142 hat geschrieben:Hallo python-forum.de-Community!
Zunächst einmal möchte ich mich kurz vorstellen, ich heiße L3viathan2142, bin 17 Jahre alt und Schüler. Ich programmiere, seit ich 12 bin, allerdings nie mit Python: Begonnen habe ich mit C++, bin dort allerdings nicht weit gekommen, habe dann HTML, Javascript, VBS, CSS, PHP, ein bisschen VB und Java gelernt. Die letzten ein bis zwei Jahre habe ich mich hauptsächlich mit der Windows-only Scriptsprache AutoIt beschäftigt, ich bin aktives Mitglied des AutoIt.de-Forums.
Vor einiger Zeit kam mir die Idee, ein Internet-bündelndes Tool zu schreiben, welches mir Facebook- und Twitterstatusupdates sowie per IMAP neue Mails anzeigt, möglicherweise erweiterbar mit anderen Portalen.
Ich habe das zunächst mit AutoIt versucht, mir dazu cURL heruntergeladen, jedoch habe ich keine vernünftige Downloadquelle für curl inkl. dlls gefunden.
Also habe ich in der Twitterdokumentation nach Bibliotheken gesucht und python-twitter gefunden.
Mittlerweile habe ich schon mit Hilfe des Tutorials ein Statusupdate hingekriegt.
Fragen:
Ist Python die richtige Sprache für sowas?
Vorteile sehe ich in der Platformunabhängigkeit. Nachteil für mich ist natürlich, dass ich mit Python nicht vertraut bin, außerdem ist mir Platformunabhängigkeit momentan eh nicht so wichtig.
Python eignet sich prima :) z.B. so:

Code: Alles auswählen

import urllib
 
message = "Hello Twitter!"
data = urllib.urlencode({"status" : message})
res = urllib.urlopen(
        "http://%s:%s@twitter.com/statuses/update.xml" % 
        (username,password), data)
Wobei das Twitter-Module auf keinen Fall verkehrt ist!

L3viathan2142 hat geschrieben:Besteht die Möglichkeit, eine Python-App als exe zu verpacken? Besonders diese Funktion gefällt mir bei Autoit. Ansonsten müsste ich ja benötigte Bibliotheken bei einem Setup mitinstallieren lassen...
http://www.py2exe.org/
http://www.python-forum.de/post-132369.html#132369
L3viathan2142 hat geschrieben:Bemerkungen: Ich habe Boardsuche sowie Google benutzt, habe aber fast nichts brauchbares gefunden. Außerdem präferiere ich menschliche Hilfe, wenn möglich.
Fehlen noch weitere Fakten? Habt ihr Fragen? Bitte fragt.

Gruß, L3viathan2142
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nicht unerwähnt bleiben sollte auch der [wiki=PyInstaller - Windows Programme unter Linux kompilieren]PyInstaller[/wiki], den ich persönlich sogar lieber als py2exe mag.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

snafu hat geschrieben:Nicht unerwähnt bleiben sollte auch der [wiki=PyInstaller - Windows Programme unter Linux kompilieren]PyInstaller[/wiki], den ich persönlich sogar lieber als py2exe mag.
Dann sollte man aber auch nicht unerwaehnt lassen, dass sich Python-Programme auch gut unveraendert verteilen lassen, sofern es pure-Python ist, d.h. kein C enthaelt, denn da macht Windows Probleme, da die meisten Rechner noch nie einen Compiler gesehen haben.
Das ganze natuerlich unter der Vorraussetzung, dass Python installiert ist. Warum ich das erwaehne ist, dass ``py2exe`` und ``pyinstaller`` den Interpreter selbst mitliefern und so bei mehreren Programmen doch grosse Mengen an Speicher umsonst verbraten werden.
Eine Alternative waere vielleicht auch IronPython, da .net ja durchaus verbreitet ist auf Windows Maschinen, allerdings hab ich mich damit noch nicht beschaeftigt.
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Was aber wieder zur müßigen Diskussion führt, ob Windows-Normal-User sich überzeugen lassen, ein extra Programm zu installieren (Python), weil das grundsätzlich sinnvoller wäre. Am besten wäre wohl ein Installer, der prüft, ob Python vorhanden ist bzw. ob die mindestens nötige Version installiert ist und ggf. Python nachlädt.

Windows-User (nicht alle) drücken ja gerne auf "OK" und "Weiter". Wenn da etwas zusätzliches installiert wird, ist es egal. Sie haben nur meistens keine Lust, selber auf die Python-Seite zu gehen und sich um Download + Installation zu kümmern. Eigentlich auch verständlich: Ich möchte als Anwender ein fertiges Programm nutzen und mich nicht erst um die Voraussetzungen kümmern. Wenn das OS keine Paketverwaltung mitbringt, müssen das eben die Programme erledigen.

Gibt es so eine Art von speziellem Python-Installer eigentlich schon? Wäre doch ansonsten ne prima Idee für ein Projekt. Sollte man dann halt nur nicht in Python schreiben, weil es recht unlogisch ist, das zu überprüfende bereits vorauszusetzen. ;) Den Kompromiss, dass der Installer auch ein paar Kilobyte benötigt, kann man IMHO eingehen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

snafu hat geschrieben:Was aber wieder zur müßigen Diskussion führt, ob Windows-Normal-User sich überzeugen lassen, ein extra Programm zu installieren (Python), weil das grundsätzlich sinnvoller wäre.
Das muss nicht diskutiert werden, denn Windows-Normal-User lassen sich überzeugen, wie die Visual Basic Runtimes und das .NET Framework demonstriert haben.

Für so einen Installer brauchts nur ein kleines C-File, dass Python runterlädt und den MSI-Installer im "unattended"-Modus startet.

@L3viathan2142: Platformunabhängigkeit ist insofern wichtig, wenn man Feedback von erfahreneren Leuten haben will. Die nutzen zumindest in der Python-Welt eher seltener Windows und haben daher idR wenig Lust das System zu starten nur um irgendwelche Fragen zu beantworten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Leonidas hat geschrieben:Für so einen Installer brauchts nur ein kleines C-File, dass Python runterlädt und den MSI-Installer im "unattended"-Modus startet.
Ja, an C dachte ich auch. Ich fragte nur, ob es das schon gibt, weil ich im Moment dabei bin, mir C ein bißchen beizubringen und schon Bock hätte, sowas zu programmieren, sofern ich denn das Rad nicht neu erfinde...
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Vielen Dank für die Antworten!
Ich habe momentan noch ein Problem mit GUIs, ich kriege es zwar hin, mittels Tkinter eine GUI zum Laufen zu bringen, jedoch ist mir das viel zu ungenau. Kann man Ctrls auch Pixelgenau positionieren? Ich habe das bis jeztz mit .grid oder .pack gemacht...
Den Python-Installer kann ich mal schnell mit AutoIt machen, dafür ist AutoIt ja gemacht, sagt schon der Name... :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

snafu hat geschrieben:Ja, an C dachte ich auch. Ich fragte nur, ob es das schon gibt, weil ich im Moment dabei bin, mir C ein bißchen beizubringen und schon Bock hätte, sowas zu programmieren, sofern ich denn das Rad nicht neu erfinde...
Nicht dass ich wüsste. Bei C muss man halt schauen, wie man die richtige Datei runtergeladen bekommt, also ggf. libcurl, libfetch, libneon oder libwww statisch linken. Nicht schön, aber immerhin.

@L3viathan2142: Ja genau das sollte man eben nicht machen. Pixelgenaue Positionierung bringt so viele Probleme mit sich, dass man sich das am besten verkneift.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Ich habe damit noch nie Probleme gehabt. So ist alles zu ungenau! Gibt es denn eine Möglichkeit der Pixelgenauen Positionierung?
edit: Habe das Programm zum Python-Download + Installation fertig.
edit:Recht hat er, wird angepasst...
Zuletzt geändert von L3viathan2142 am Montag 27. Juli 2009, 13:37, insgesamt 1-mal geändert.
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Leonidas:

Man wird wohl auch MSDN-Bibliothek statisch linken müssen, sofern man mittels Registry auf eine Python-Installation prüfen will. Oder gibt es für die Registry speziellere - und somit auch kleinere - Bibliotheken?
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@L3viathan2142:

Und wo ist die Prüfung auf eine vorhandene Installation? Außerdem ist das nicht XP-tauglich. Zudem muss etwas eingebaut werden, mit dem sich die Mindestabhängigkeit festlegen lässt. Insbesondere weil der Sprung auf die 3er-Serie noch lange nicht von allen Programmen gemacht wurde. Also man müsste ">=2.6, aber <3.0" ausdrücken können.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

L3viathan2142 hat geschrieben:Ich habe damit noch nie Probleme gehabt.
Lass nur mal den Benutzer eine andere Schriftart fuer sein System einstellen, und schon passt alles nicht mehr. Die Diskussion hatten wir doch schonmal irgendwo...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Alles klar, wird gemacht.. aber wie meinst du das mit dem letzten Satz?
Es soll installiert werden, wenn nicht mindestens Version 2.6 installiert ist?
Das ist nicht ganz einfach, die Registry erlaubt ja kein Auflisten der Keys...
HKLM\Software\Python\PythonCore\2.6 gibt es zum Beispiel, wenn man Version 2.6 hat.
Es gibt aber keinen Schlüssel wie zum Beispiel HKLM\SOFTWARE\Python\PythonCore
Version="2.6"
, oder ähnliches...
Dann muss ich sozusagen auf jede Version einzeln überprüfen... :cry:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

L3viathan2142 hat geschrieben:Ich habe damit noch nie Probleme gehabt. So ist alles zu ungenau!
Hmm? So ziemlich jedes Programm nutzt Sizer/Layout Manager (von VB6-Programmen abgesehen, aber die sehen immer schlecht aus, egal was) und du wirst doch jetzt nicht behaupten dass die alle zu ungenau sind?

Jemand hat auch mal ein hübsches Beispiel gepostet: Mit Layout Manager vs. pixelgenaue Positionierung.

@snafu: Du meinst sicher WinAPI.. wenn man dadrauf Zugriff braucht dann wird man wohl auch irgendwo dagegen linken müssen. Ab hier wird das dann langsam hässlich.

@L3viathan2142: Natürlich unterstützt Windows das Auflisten von Keys, wie würde denn sonst sowas wie Regedit funktionieren? In Python geht das über ``_winreg.EnumKey``.
Zuletzt geändert von Leonidas am Montag 27. Juli 2009, 13:51, insgesamt 2-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

L3viathan2142 hat geschrieben:Alles klar, wird gemacht.. aber wie meinst du das mit dem letzten Satz?
Es soll installiert werden, wenn nicht mindestens Version 2.6 installiert ist?
Nein. Der Ausdruck bedeutet, dass das Programm Python 2.6 oder besser fordert (dazu gehört auch 2.6.1 usw), aber die Major-Versionsnummer muss tiefer als 3 sein. War natürlich nur ein Beispiel.
L3viathan2142 hat geschrieben:Das ist nicht ganz einfach, die Registry erlaubt ja kein Auflisten der Keys...
HKLM\Software\Python\PythonCore\2.6 gibt es zum Beispiel, wenn man Version 2.6 hat.
Es gibt aber keinen Schlüssel wie zum Beispiel HKLM\SOFTWARE\Python\PythonCore
Version="2.6"
, oder ähnliches...
Man muss sich halt den Namen des Unterschlüssels von `PythonCore` angucken und mit dem geforderten Versionsstring vergleichen. Vielleicht sollte man das auch getrennt entgegen nehmen:

Code: Alles auswählen

check_version(major, minor, micro)
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Das Problem ist: Es gibt afaik aus Sicherheitsgründen keine Möglichkeit, die Unterschlüssel eines Schlüssels aufzulisten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

L3viathan2142 hat geschrieben:Das Problem ist: Es gibt afaik aus Sicherheitsgründen keine Möglichkeit, die Unterschlüssel eines Schlüssels aufzulisten.
Wie ich schon gesagt habe: das stimmt nicht. Zumindest nicht in C oder Python. Vielleicht stimmt es ja in AutoIt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Übrigens unglaublich sinnvoll, für dieses Problem eine weitere Skriptsprache zu fordern... Letztlich wird man das wohl in C oder C++ vorkompiliert ausliefern müssen. Wobei, wenn echt noch gegen zusätzliche Libs gelinkt werden muss, dann kann man sich das Ganze auch sparen, weil es dann am Ende womöglich größer als der Interpreter wird. Vielleicht ist auch *das* der Grund, warum es so ein Programm nicht gibt.
Benutzeravatar
L3viathan2142
User
Beiträge: 8
Registriert: Montag 27. Juli 2009, 01:53

Ich erinnere mich, das mal im Zusammenhang mit dem WSH gelesen zu haben, dann triffts wohl nur auf den zu.
Mea culpa.
Bez. Kritik wegen weiterer Skriptsprache: Wenn man das Skript kompiliert, kriegt man davon ja garnichts mit, AutoIt ist auch ziemlich schnell.. Ihr müsst es ja auch nicht nutzen, es geht ja um ein Projekt von mir.
Bez. Layoutmanager vs Pixelgenau: Mal sehen, vlt. muss ich mich einfach umgewöhnen, besonders, wenns um Platformunabhängigkeit geht. Ich hab ja auch noch nicht viel damit gemacht.

hier der neue Link: http://rapidshare.com/files/260598597/pyload.exe
hier wieder der Code, nur falls jemanden interessiert..

Code: Alles auswählen

;Check:
$read=RegEnumKey("HKLM\SOFTWARE\Python\PythonCore",1)
If @error Or Number($read) < 2.6 Then 
	;Download und Installation:
	$size=InetGetSize("http://www.python.org/ftp/python/3.1/python-3.1.msi")
	InetGet("http://www.python.org/ftp/python/3.1/python-3.1.msi",@ScriptDir & "/python.msi",1,1)
	ProgressOn("Downloading Python","0%","0/"&Round($size/1024,1)&"KB")
	While @InetGetActive
		ProgressSet(Round(100*(@InetgetBytesRead/$size)),Round(@InetGetBytesRead/1024,1) & "/" & Round($size/1024,1) & "KB",Round(100*(@InetgetBytesRead/$size),1) & "%")
		Sleep(100)
	WEnd
	ProgressOff()
	ProgressOn("Installing Python","Installing....","")
	$PID=Run("msiexec /i python.msi /quiet /qn /norestart")
	While ProcessExists($PID)
		For $i=0 To 100
			Sleep(20)
			ProgressSet($i)
		Next
	WEnd
EndIf
Antworten