Ich habe mal versucht mir ein Programm zu schreiben mit dem ich auf Knopfdruck twittern kann.
Dazu habe ich mir dieses Script angeschaut:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include "Icons.au3"
#Include <WinAPI.au3>
#include <WinHTTP.au3>
Global $hw_open = _WinHttpOpen("Twitter Poster")
Global $hw_connect = _WinHttpConnect($hw_open, "twitter.com")
Global $Eingelogt = 0
Global Const $Token=_GetAuthenticity_Token()
[/autoit] [autoit][/autoit] [autoit]$MainGUI = GUICreate("Twitter Poster", 550, 170, Default, Default)
GUISetBkColor(0x5599BB)
$eText=GUICtrlCreateEdit("",_WinAPI_GetSystemMetrics(4), 10, 500, 60, BitOR($ES_WANTRETURN,$ES_CENTER) )
GUICtrlSetState($eText,$GUI_DISABLE)
$eBenutzername=GUICtrlCreateInput("", 10, 90, 60, 20 )
$ePw=GUICtrlCreateInput("", 10, 130, 60, 20, $ES_PASSWORD+$ES_AUTOHSCROLL )
$LoginInfo=GUICtrlCreateLabel("<< Benutzername", 80, 90, 140, 25 )
GUICtrlSetFont (-1, 12, 800, 4, "Comic Sans MS" )
$PasswortInfo=GUICtrlCreateLabel("<< Passwort", 80, 130, 140, 25 )
GUICtrlSetFont (-1, 12, 800, 4, "Comic Sans MS" )
$EinlogInfo=GUICtrlCreateLabel("Einloggen...", 80, 110, 140, 25 )
GUICtrlSetFont (-1, 12, 800, 2, "Comic Sans MS" )
GUICtrlSetState($EinlogInfo,$GUI_HIDE)
$AbsendenPic=GUICtrlCreatePic("", 400, 50 )
_SetImage($AbsendenPic, @ScriptDir&"\Birdies\128\3.png")
$LoginPic=GUICtrlCreatePic("", 220, 100, 50, 50)
_SetImage($LoginPic, @ScriptDir&"\Birdies\login_128.png")
$AusloggenPic=GUICtrlCreatePic("", 80, 100, 50, 50)
_SetImage($AusloggenPic, @ScriptDir&"\Birdies\delete_item_128.png")
GUICtrlSetState($AusloggenPic,$GUI_HIDE)
WinSetTrans("Twitter Poster","",0)
GUISetState(@SW_SHOW)
For $i=1 To 255 Step +2
Sleep (10)
WinSetTrans("Twitter Poster","",$i)
WinMove("Twitter Poster","",@desktopwidth/2 - (295+$i)/2-2,@desktopheight/2 - 170/2-30)
Next
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $AbsendenPic
If GUICtrlRead($eText)<>'' Then
_Posten(GUICtrlRead($eText))
GUICtrlSetData($eText,"")
EndIf
Case $LoginPic
If GUICtrlRead($eBenutzername)<>'' And GUICtrlRead($ePw)<>'' Then
GUICtrlSetState ($LoginInfo, $GUI_HIDE )
GUICtrlSetState ($PasswortInfo, $GUI_HIDE)
GUICtrlSetState ($EinlogInfo,$GUI_SHOW)
_Einloggen(GUICtrlRead($eBenutzername),GUICtrlRead($ePw))
Else
MsgBox ( 48, "Logindaten fehlen", "Benutzername und Passwort bitte vorher eingeben" )
EndIf
Case $AusloggenPic
_Ausloggen()
EndSwitch
WEnd
Func _GetAuthenticity_Token()
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"GET", "/","HTTP/1.1", "http://twitter.com/")
_WinHttpSendRequest($h_openRequest)
_WinHttpReceiveResponse($h_openRequest)
Local $data=""
Do
$data&=_WinHttpReadData($h_openRequest)
Until @error
_WinHttpCloseHandle($h_openRequest)
$result=StringRegExp($data,'<[^>]*?name="authenticity_token"[^>]*?value="(.*?)"',1)
If @error Then
$result=StringRegExp($data,'<[^>]*?value="(.*?)"[^>]*?name="authenticity_token"',1)
If @error Then Return SetError(1,0,"")
EndIf
Return $result[0]
EndFunc
Func _Einloggen($username,$pw)
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/sessions","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token&"&session[username_or_email]="&_URIEncode($username)&"&session[password]="&_URIEncode($pw)&"&q="
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF , $sPost)
_WinHttpReceiveResponse($h_openRequest)
Local $data=""
Do
$data&=_WinHttpReadData($h_openRequest)
Until @error
If StringInStr($data,"Wrong Username/Email and password combination.") Then
MsgBox ( 16, " Falsches Passwort ", "Das von ihnen eingegebene Passwort ist falsch" )
GUICtrlSetState ($LoginInfo, $GUI_SHOW)
GUICtrlSetState ($PasswortInfo, $GUI_SHOW)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
Else
$Eingelogt = 1
GUICtrlSetState ($LoginPic, $GUI_HIDE )
GUICtrlSetState ($LoginInfo, $GUI_HIDE )
GUICtrlSetState ($PasswortInfo, $GUI_HIDE)
GUICtrlSetState ($eBenutzername, $GUI_DISABLE)
GUICtrlSetState ($ePw, $GUI_DISABLE)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
GUICtrlSetState ($AusloggenPic,$GUI_SHOW)
GUICtrlSetState ($eText,$GUI_ENABLE)
EndIf
_WinHttpCloseHandle($h_openRequest)
EndFunc
Func _Posten($nachricht)
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/status/update","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token&"&status="&_URIEncode($nachricht)&"&twttr=true&return_rendered_status=true"
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"& @CRLF, $sPost)
_WinHttpReceiveResponse($h_openRequest)
;~ If _WinHttpQueryDataAvailable($h_openRequest) Then
;~ Local $data=""
;~ Do
;~ $data&=_WinHttpReadData($h_openRequest)
;~ Until @error
;~ FileWrite ("Posten.htm", $data)
;~ EndIf
;~ $header = _WinHttpQueryHeaders($h_openRequest)
;~ MsgBox(0, "Header", $header)
_WinHttpCloseHandle($h_openRequest)
EndFunc
Func _URIEncode($sData)
; Author: Prog@ndy
Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
Local $nChar
$sData=""
For $i = 1 To $aData[0]
;~ ConsoleWrite($aData[$i] & @CRLF)
$nChar = Asc($aData[$i])
Switch $nChar
Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
$sData &= $aData[$i]
Case 32
$sData &= "+"
Case Else
$sData &= "%" & Hex($nChar,2)
EndSwitch
Next
Return $sData
EndFunc
Func _Ausloggen()
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/sessions/destroy","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF , $sPost)
_WinHttpReceiveResponse($h_openRequest)
_WinHttpCloseHandle($h_openRequest)
GUICtrlSetState ($eText,$GUI_DISABLE)
GUICtrlSetState ($LoginPic, $GUI_SHOW )
GUICtrlSetState ($LoginInfo, $GUI_SHOW )
GUICtrlSetState ($PasswortInfo, $GUI_SHOW)
GUICtrlSetState ($eBenutzername, $GUI_ENABLE)
GUICtrlSetState ($ePw, $GUI_ENABLE)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
GUICtrlSetState ($AusloggenPic,$GUI_HIDE)
EndFunc
Welches Perfekt funktioniert. Ich habe mir einige Code-Zeilen geklaut und daraus das gemacht:
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include "Icons.au3"
#Include <WinAPI.au3>
#include <WinHTTP.au3>
#include "ModernMenuRaw.au3"
HotKeySet("^t","go")
Opt("guioneventmode",1)
Global $hw_open = _WinHttpOpen("Twitter")
Global $hw_connect = _WinHttpConnect($hw_open, "twitter.com")
Global $Eingelogt = 0
Global $tweetbutton, $gui
Global $run = 0
Global $input
Global Const $Token=_GetAuthenticity_Token()
While Sleep(20)
WEnd
_Einloggen(IniRead("login","login","name","name"),IniRead("login","login","pw","password"))
[/autoit] [autoit][/autoit] [autoit]Func go()
If $run = 0 Then
$run = 1
ElseIf $run = 1 THen
$run = 0
EndIf
If $run = 0 Then GUIDelete($gui)
If $run = 1 Then
$gui = GUICreate("Twitter",500,60,-1,-1)
$tweetbutton = GUICtrlCreateButton("Tweet",440,10,50,40)
$input = GUICtrlCreateInput("",10,20,420,20)
GUICtrlSetOnEvent($tweetbutton,"tweetbutton")
GUISetOnEvent($GUI_EVENT_CLOSE,"_endfunc")
GUISetState(@SW_SHOW)
EndIf
EndFunc
Func tweetbutton()
_Posten(GUICtrlRead($input))
EndFunc
Func _endfunc()
GUIDelete($gui)
EndFunc
Func _Einloggen($username,$pw)
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/sessions","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token&"&session%5Busername_or_email%5D="&_URIEncode($username)&"&session%5Bpassword%5D="&_URIEncode($pw)&"&q="
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF , $sPost)
_WinHttpReceiveResponse($h_openRequest)
Local $data=""
Do
$data&=_WinHttpReadData($h_openRequest)
Until @error
If StringInStr($data,"Wrong Username/Email and password combination.") Then
MsgBox ( 16, " Falsches Passwort ", "Das von ihnen eingegebene Passwort ist falsch" )
GUICtrlSetState ($LoginInfo, $GUI_SHOW)
GUICtrlSetState ($PasswortInfo, $GUI_SHOW)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
Else
$Eingelogt = 1
GUICtrlSetState ($LoginPic, $GUI_HIDE )
GUICtrlSetState ($LoginInfo, $GUI_HIDE )
GUICtrlSetState ($PasswortInfo, $GUI_HIDE)
GUICtrlSetState ($eBenutzername, $GUI_DISABLE)
GUICtrlSetState ($ePw, $GUI_DISABLE)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
GUICtrlSetState ($AusloggenPic,$GUI_SHOW)
GUICtrlSetState ($eText,$GUI_ENABLE)
EndIf
_WinHttpCloseHandle($h_openRequest)
EndFunc
Func _GetAuthenticity_Token()
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"GET", "/","HTTP/1.1", "http://twitter.com/")
_WinHttpSendRequest($h_openRequest)
_WinHttpReceiveResponse($h_openRequest)
Local $data=""
Do
$data&=_WinHttpReadData($h_openRequest)
Until @error
_WinHttpCloseHandle($h_openRequest)
$result=StringRegExp($data,'<[^>]*?name="authenticity_token"[^>]*?value="(.*?)"',1)
If @error Then
$result=StringRegExp($data,'<[^>]*?value="(.*?)"[^>]*?name="authenticity_token"',1)
If @error Then Return SetError(1,0,"")
EndIf
Return
EndFunc
Func _Posten($nachricht)
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/status/update","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token&"&status="&_URIEncode($nachricht)&"&twttr=true&return_rendered_status=true"
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"& @CRLF, $sPost)
_WinHttpReceiveResponse($h_openRequest)
;~ If _WinHttpQueryDataAvailable($h_openRequest) Then
;~ Local $data=""
;~ Do
;~ $data&=_WinHttpReadData($h_openRequest)
;~ Until @error
;~ FileWrite ("Posten.htm", $data)
;~ EndIf
;~ $header = _WinHttpQueryHeaders($h_openRequest)
;~ MsgBox(0, "Header", $header)
_WinHttpCloseHandle($h_openRequest)
EndFunc
Func _URIEncode($sData)
; Author: Prog@ndy
Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
Local $nChar
$sData=""
For $i = 1 To $aData[0]
;~ ConsoleWrite($aData[$i] & @CRLF)
$nChar = Asc($aData[$i])
Switch $nChar
Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
$sData &= $aData[$i]
Case 32
$sData &= "+"
Case Else
$sData &= "%" & Hex($nChar,2)
EndSwitch
Next
Return $sData
EndFunc
Func _Ausloggen()
Global $h_openRequest = _WinHttpOpenRequest($hw_connect,"POST", "/sessions/destroy","HTTP/1.1", "http://www.twitter.com/")
$sPost = "authenticity_token="&$Token
[/autoit] [autoit][/autoit] [autoit]_WinHttpSendRequest($h_openRequest, "Content-Type: application/x-www-form-urlencoded"& @CRLF , $sPost)
_WinHttpReceiveResponse($h_openRequest)
_WinHttpCloseHandle($h_openRequest)
GUICtrlSetState ($eText,$GUI_DISABLE)
GUICtrlSetState ($LoginPic, $GUI_SHOW )
GUICtrlSetState ($LoginInfo, $GUI_SHOW )
GUICtrlSetState ($PasswortInfo, $GUI_SHOW)
GUICtrlSetState ($eBenutzername, $GUI_ENABLE)
GUICtrlSetState ($ePw, $GUI_ENABLE)
GUICtrlSetState ($EinlogInfo,$GUI_HIDE)
GUICtrlSetState ($AusloggenPic,$GUI_HIDE)
EndFunc
Dieses funktioniert allerdings nicht; es tweetet nichts. Warum?