Eigentlich bin ich kein großer Freund von Visual Basic, aber aufgrund vielfachen Wunschs habe ich hier ein kleines Tutorial geschrieben, wie man mit VB ein Event mit Foto erstellt.
1. Vorbereitung: App anlegen und Access-Token generieren – wie ich das z. B. hier beschrieben habe (Punkt 1.-5.)
2. Als nächstes sollte folgendes Formular angelegt werden (in meinem Beispiel mit Visual Studio Express 2010):
Hinweis: Für die zwei DateTimePicker verwende ich Format:Custom und dann in CustomFormat: „yyyy-MM-dd HH:mm“
3. So sieht der Code für den Button aus:
Dim Nachricht, Antwort As Byte() Dim AccessToken As String = "..." Dim StartZeit, EndZeit As String ' Erstellt ein Event für den User des Access-Tokens Dim GraphURL As String = _ "https://graph.facebook.com/me/events" 'WebClient anlegen Dim myWebClient As New Net.WebClient 'Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen Net.ServicePointManager.Expect100Continue = False 'Die Start- und Endzeit richtig formatieren... StartZeit = DateTimePickerStartDatum.Text EndZeit = DateTimePickerEndDatum.Text 'statt dem Leerzeichen zwischen Datum und 'Uhrzeit steht ein "T" StartZeit = Replace(StartZeit, " ", "T") EndZeit = Replace(EndZeit, " ", "T") 'außerdem muss die Timezone angehängt werden, also '+0100 - das "+" wird URL-codiert (%2B) StartZeit = StartZeit & "%2B0100" EndZeit = EndZeit & "%2B0100" Nachricht = Encoding.UTF8.GetBytes( "name=" & TextBoxVeranstaltung.Text _ & "&description=" & TextBoxBeschreibung.Text _ & "&start_time=" & StartZeit _ & "&end_time=" & EndZeit _ & "&privacy=OPEN" _ & "&access_token=" & AccessToken) Try Antwort = myWebClient.UploadData(GraphURL, Nachricht) 'Erfolgsmeldung (ID des Posts) in JSON 'MsgBox(System.Text.Encoding.ASCII.GetString(Antwort)) MsgBox("Event Erfogreich gepostet!") Catch ex As Exception MsgBox("Fehler: " & ex.Message) Return End Try 'jetzt die ID des neuen Events auslesen... 'optimalerweise könnte man JSON deserialisieren, wie 'ich das in meinem Blog beschrieben habe: 'http://bit.ly/YoDmgc 'schneller geht es in diesem Fall mit 'einem regulären Ausdruck - einfach 'die Zahl mit \d extrahieren: Dim pattern As String = "\d{1,}" Dim matches As MatchCollection Dim defaultRegex As New Regex(pattern) matches = defaultRegex.Matches( System.Text.Encoding.ASCII.GetString(Antwort)) If matches.Count > 0 Then 'Erfolg - EventID in Form schreiben LabelEventID.Text = matches(0).Value Else 'Fehler MsgBox("Keine ID in Antwort gefunden: " _ & System.Text.Encoding.ASCII.GetString(Antwort)) Return End If 'jetzt das Bild uploaden... GraphURL = "https://graph.facebook.com/" _ & LabelEventID.Text _ & "/picture?access_token=" _ & AccessToken Try Antwort = myWebClient.UploadFile(GraphURL, TextBoxBild.Text) 'MsgBox(System.Text.Encoding.ASCII.GetString(Antwort)) MsgBox("Bild erfogreich gepostet!") Catch ex As Exception MsgBox("Fehler: " & ex.Message) End Try
Tipps:
- Importiert werden muss „System.Text“ und „System.Text.RegularExpressions“
- Noch schöner ist ein asynchroner Upload für das Bild, den ich hier beschrieben habe.
- Bestimmte Sonderzeichen und Umlaute machen in der Beschreibung und im Namen u. U. Probleme – eine Lösung dazu habe ich hier beschrieben.
Im nächsten Teil werde ich noch kurz erklären, wie man hiermit auch gleich alle seine Freunde einladen kann.
P.S.
Probleme? Fragen? Anregungen? Ich helfe jederzeit und gerne – einfach einen Kommentar oder Mail schreiben, die Antwort kommt schnellstmöglich. Unternehmen, die Unterstützung, Beratung oder Schulung bei der API- oder Webprogrammierung, der Social-Media-Entwicklung oder dem Social-Media-Management benötigen finden zudem entsprechende Angebote meiner Firma auf der Website www.Frank-IT-Beratung.de
Hallo Laura,
vielen Dank für Dein Feedback – das ist interessant, ich habe da keine Probleme mit „-“ und „:“.
Hast Du Dir schon mal die String StartZeit ausgeben lassen – diese sollte ungefähr so aussehen:
2012-08-31T16:00%2B0100
Welche VisualStudio Version verwendest Du? Dann würde ich mal probieren, ob ich den Fehler reproduzieren kann.
bzw. ich habe gerade getestet eine normale Nachricht auf Facebook zu posten. Das hat einwandfrei funktioniert. Wenn ich jedoch die Zeichen „-“ und „:“ benutze kommt der selbe Fehler wie wenn ich versuche ein Event zu erstellen…daher denke ich es liegt an diesen beiden Zeichen im Datum.?
Gruß
Laura
Hallo,
ich teste gerade deinen Code und bekomme immer einen Fehler.
Wenn ich Debugge und im Direktfenster den Inhalt von „Nachricht“ abfrage sagt er „Der Wert vom Typ „1-dimensionales Array von Byte“ kann nicht in String konvertiert werden“.
Ich vermute mal das liegt an „StartZeit“ und „EndZeit“… aber ich weiss mir leider nicht wie ich das lösen soll…
Ich hoffe du kannst mir da vielleicht weiter helfen?
Vielen Dank schonmal
Beste Grüße
Laura