Seite 1 von 2

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

Verfasst: Montag 27. Juli 2009, 02:14
von L3viathan2142
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

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

Verfasst: Montag 27. Juli 2009, 09:11
von glaslos
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

Verfasst: Montag 27. Juli 2009, 11:00
von snafu
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.

Verfasst: Montag 27. Juli 2009, 11:14
von cofi
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.

Verfasst: Montag 27. Juli 2009, 11:48
von snafu
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.

Verfasst: Montag 27. Juli 2009, 12:12
von Leonidas
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.

Verfasst: Montag 27. Juli 2009, 12:24
von snafu
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...

Verfasst: Montag 27. Juli 2009, 13:00
von L3viathan2142
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

Verfasst: Montag 27. Juli 2009, 13:12
von Leonidas
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.

Verfasst: Montag 27. Juli 2009, 13:21
von L3viathan2142
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...

Verfasst: Montag 27. Juli 2009, 13:30
von snafu
@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?

Verfasst: Montag 27. Juli 2009, 13:33
von snafu
@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.

Verfasst: Montag 27. Juli 2009, 13:38
von Rebecca
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...

Verfasst: Montag 27. Juli 2009, 13:43
von L3viathan2142
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:

Verfasst: Montag 27. Juli 2009, 13:48
von Leonidas
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``.

Verfasst: Montag 27. Juli 2009, 13:49
von snafu
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)

Verfasst: Montag 27. Juli 2009, 13:52
von L3viathan2142
Das Problem ist: Es gibt afaik aus Sicherheitsgründen keine Möglichkeit, die Unterschlüssel eines Schlüssels aufzulisten.

Verfasst: Montag 27. Juli 2009, 13:57
von Leonidas
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.

Verfasst: Montag 27. Juli 2009, 14:04
von snafu
Ü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.

Aaalso...

Verfasst: Montag 27. Juli 2009, 14:21
von L3viathan2142
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