Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

TwitPic API Funktion Probleme mit Umlaute

Frage Entwicklung VB for Applications

Mitglied: 60734

60734 (Level 1)

29.06.2010, aktualisiert 16:30 Uhr, 2471 Aufrufe

Hallo Leute,

da ich für ein Programm, welches ich im Moment schreibe, eine Funktion brauche um Bilder auf TwitPic hochzuladen habe ich im internet erstmal gegoogelt.
Bin dann daraufhin auf folgende Funktion gestoßen:

01.
 Public Function TwitPicUpload(ByVal Filename As String, ByVal Message As String, ByVal Username As String, ByVal Password As String, Optional ByVal Source As String = "") As String 
02.
 
03.
            Dim ReturnValue As String = String.Empty 
04.
 
05.
            Try 
06.
                ' Get the file into an array of bytes 
07.
                Dim BinaryData As Byte() = System.IO.File.ReadAllBytes(Filename) 
08.
 
09.
                Dim boundary As String = Guid.NewGuid().ToString() 
10.
                Dim Header As String = String.Format("--{0}", boundary) 
11.
                Dim Footer As String = String.Format("--{0}--", boundary) 
12.
 
13.
                ' Build the request 
14.
                Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("http://twitpic.com/api/uploadAndPost"), HttpWebRequest) 
15.
 
16.
                With Request 
17.
                    .PreAuthenticate = True 
18.
                    .AllowWriteStreamBuffering = True 
19.
                    .ContentType = String.Format("multipart/form-data; boundary={0}", boundary) 
20.
                    .Method = "POST" 
21.
                End With 
22.
 
23.
                Dim FileContentType As String = String.Empty 
24.
                If Filename.ToUpper.EndsWith(".GIF") Then 
25.
                    FileContentType = "image/gif" 
26.
                ElseIf Filename.ToUpper.EndsWith(".JPG") Then 
27.
                    FileContentType = "image/jpeg" 
28.
                ElseIf Filename.ToUpper.EndsWith(".JPEG") Then 
29.
                    FileContentType = "image/jpeg" 
30.
                ElseIf Filename.ToUpper.EndsWith(".PNG") Then 
31.
                    FileContentType = "image/png" 
32.
                Else 
33.
                    Return String.Empty 
34.
                End If 
35.
 
36.
                Dim FileHeader As String = [String].Format("Content-Disposition: file; name=""{0}""; filename=""{1}""", "media", Filename) 
37.
                Dim FileData As String = Encoding.GetEncoding("iso-8859-1").GetString(BinaryData) 
38.
 
39.
                Dim Contents As New StringBuilder() 
40.
                With Contents 
41.
                    .AppendLine(Header) 
42.
 
43.
                    .AppendLine(FileHeader) 
44.
                    .AppendLine([String].Format("Content-Type: {0}", FileContentType)) 
45.
                    .AppendLine() 
46.
                    .AppendLine(FileData) 
47.
 
48.
                    .AppendLine(Header) 
49.
                    .AppendLine([String].Format("Content-Disposition: form-data; name=""{0}""", "username")) 
50.
                    .AppendLine() 
51.
                    .AppendLine(Username) 
52.
 
53.
                    .AppendLine(Header) 
54.
                    .AppendLine([String].Format("Content-Disposition: form-data; name=""{0}""", "password")) 
55.
                    .AppendLine() 
56.
                    .AppendLine(Password) 
57.
 
58.
                    If Source <> String.Empty Then 
59.
                        .AppendLine(Header) 
60.
                        .AppendLine([String].Format("Content-Disposition: form-data; name=""{0}""", "source")) 
61.
                        .AppendLine() 
62.
                        .AppendLine(Source) 
63.
                    End If 
64.
 
65.
                    If Not String.IsNullOrEmpty(Message) Then 
66.
                        .AppendLine(Header) 
67.
                        .AppendLine([String].Format("Content-Disposition: form-data; name=""{0}""", "message")) 
68.
                        .AppendLine() 
69.
                        .AppendLine(Message) 
70.
                    End If 
71.
 
72.
                    .AppendLine(Footer) 
73.
 
74.
                    Dim Bytes As Byte() = Encoding.GetEncoding("iso-8859-1").GetBytes(Contents.ToString()) 
75.
                    Request.ContentLength = Bytes.Length 
76.
 
77.
                    Using requestStream As Stream = Request.GetRequestStream() 
78.
                        requestStream.Write(Bytes, 0, Bytes.Length) 
79.
 
80.
                        Using Response As HttpWebResponse = DirectCast(Request.GetResponse(), HttpWebResponse) 
81.
                            Using Reader As New StreamReader(Response.GetResponseStream()) 
82.
                                Dim Result As String = Reader.ReadToEnd() 
83.
 
84.
                                Dim ResponseDoc As New XmlDocument 
85.
                                ResponseDoc.LoadXml(Result) 
86.
                                Dim rsp As XmlNode = ResponseDoc.SelectSingleNode("//rsp") 
87.
                                If rsp.Attributes("status").Value = "ok" Then 
88.
                                    ReturnValue = ResponseDoc.SelectSingleNode("//mediaurl").Value 
89.
                                End If 
90.
                            End Using 
91.
                        End Using 
92.
                    End Using 
93.
                End With 
94.
 
95.
            Catch ex As Exception 
96.
                ' Deliberately doing nothing here. 
97.
                ' We just want to swallow the exception so that the application doesn't see an exception 
98.
 
99.
            End Try 
100.
 
101.
            Return ReturnValue 
102.
        End Function 
103.
 

Da twitter ja aber will bzw. ab dem 1. 7. soweit ich das lesen konnte vorschreibt, dass man bei api's sich zukünftig mit oauth / xoauth anmeldet, habe ich die funktion umgebastelt:

01.
Public Function uploadPic(ByVal pic As Byte(), ByVal filename As String, ByVal consumer_token As String, ByVal consumer_secret As String, ByVal oath_token As String, ByVal oath_secret As String, ByVal message As String) 
02.
 
03.
     
04.
        Dim encoding As String = "iso-8859-1" 
05.
 
06.
 
07.
 
08.
        Dim gui As String = Guid.NewGuid().ToString() 
09.
 
10.
 
11.
        Dim head As String = String.Format("--{0}", gui) 
12.
        Dim foot As String = String.Format("--{0}--", gui) 
13.
 
14.
         
15.
        Dim contents As StringBuilder = New StringBuilder() 
16.
 
17.
        'twitpic id  
18.
        contents.AppendLine(head) 
19.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "key")) 
20.
        contents.AppendLine() 
21.
        contents.AppendLine("dad3e3d0c28210e2388946bf787e9d28") 
22.
 
23.
        'consumer token 
24.
        contents.AppendLine(head) 
25.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "consumer_token")) 
26.
        contents.AppendLine() 
27.
        contents.AppendLine(consumer_token) 
28.
 
29.
        'consumer secret 
30.
        contents.AppendLine(head) 
31.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "consumer_secret")) 
32.
        contents.AppendLine() 
33.
        contents.AppendLine(consumer_secret) 
34.
 
35.
        'oath token 
36.
        contents.AppendLine(head) 
37.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "oauth_token")) 
38.
        contents.AppendLine() 
39.
        contents.AppendLine(oath_token) 
40.
 
41.
 
42.
 
43.
        'oeath secret 
44.
        contents.AppendLine(head) 
45.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "oauth_secret")) 
46.
        contents.AppendLine() 
47.
        contents.AppendLine(oath_secret) 
48.
 
49.
        'nachricht 
50.
        contents.AppendLine(head) 
51.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "message")) 
52.
        contents.AppendLine() 
53.
        contents.AppendLine(message) 
54.
 
55.
 
56.
        contents.AppendLine(head) 
57.
        contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "post_photo")) 
58.
        contents.AppendLine() 
59.
        contents.AppendLine("1") 
60.
 
61.
 
62.
        'Header schreiben 
63.
        contents.AppendLine(head) 
64.
 
65.
        'Bildinformationen schreiben, Bildkopf und die Binärdaten 
66.
        Dim fileHeader As String = String.Format("Content-Disposition: file; name=""{0}""; filename=""{1}""", "media", filename) 
67.
        Dim fileData As String = System.Text.Encoding.GetEncoding(encoding).GetString(pic) 
68.
        'Informationen zu dem Übergebenen Dateityp schreiben 
69.
        contents.AppendLine(fileHeader) 
70.
        contents.AppendLine(String.Format("Content-Type: {0}", "image/jpeg")) 
71.
        contents.AppendLine() 
72.
        contents.AppendLine(fileData) 
73.
 
74.
 
75.
        'Durch schreiben des footers signalisieren dass keine Daten mehr kommen 
76.
        contents.AppendLine(foot) 
77.
 
78.
 
79.
 
80.
 
81.
        'Stream Reader zum lesen der Antwort von Twitpic 
82.
        Dim reader As StreamReader 
83.
        Dim result As String 
84.
        Dim response As HttpWebResponse 
85.
 
86.
        'Einen Webrequest zu der TwitPic API erstellen 
87.
        Dim request As HttpWebRequest = WebRequest.Create("http://api.twitpic.com/1/uploadAndPost.format") 
88.
 
89.
        'Die Auflagen die in der API beschreiben sind erfüllen: 
90.
        'API-Zitat: 
91.
        '--- 
92.
        'Fields to post in: 
93.
        '(post data should be formatted as multipart/form-data) 
94.
        '--- 
95.
        request.ContentType = String.Format("multipart/form-data; boundary={0}", gui) 
96.
        request.Method = "POST" 
97.
 
98.
        'Die Daten die noch im Stringbuilder als String vorliegen 
99.
        'in das byte (Binär)-Format umwandeln, damit die API diese annimt 
100.
 
101.
        Dim bytes As Byte() = System.Text.Encoding.GetEncoding(encoding).GetBytes(contents.ToString()) 
102.
 
103.
        request.ContentLength = bytes.Length 
104.
 
105.
        'Einen Stream aus dem WebRequest erstellen 
106.
        Dim writer As Stream = request.GetRequestStream() 
107.
 
108.
        'Die Binären Daten in den Strom schreiben 
109.
        writer.Write(bytes, 0, bytes.Length) 
110.
        response = request.GetResponse() 
111.
 
112.
        'Antwort von Twitpic empfangen 
113.
        reader = New StreamReader(response.GetResponseStream) 
114.
        result = reader.ReadToEnd 
115.
 
116.
        reader.Close() 
117.
 
118.
 
119.
    End Function 
120.
 

Diese funktioniert auch einwandrei.

Problem nur, dass wenn in der variable message irgendein Umlaut wie ö ä oder ü enthalten ist, ab dem Punkt die Nachricht abgeschnitten wird.


WEnn ich z.B. ein Bild wegsende mit der Nachricht "Hallo, das hier ist ein Kopfhörer", kommt am ende "Hallo, das hier ist ein Kopfh" raus.

Warum ist das so?


Vielen Dank schonmal & Gruss
Ähnliche Inhalte
E-Business
Onlineshop und Warenwirtschaftssystem: API selbst programmieren?
Frage von scheuffeleE-Business8 Kommentare

Hallo! Wir haben ein älteres Warenwirtschaftssystem im Einsatz, dass noch vor der großen E-Commerce-Welle eingekauft wurde. Für unseren neuen ...

Outlook & Mail
Abwesenheitsassistent keine Umlaute
Frage von Rod160Outlook & Mail1 Kommentar

Hallo liebe Administratoren, habe folgendes Problem: unser Abwesenheitsassistent gibt nach extern keine Umlaute aus, intern funktionieren die Umlaute problemlos. ...

Ubuntu
Cloud über API einbinden
gelöst Frage von KammiiUbuntu2 Kommentare

Hi, ich betreibe einen kleinen Ubuntu Server (14.04.1 LTS) zuhause, nun möchte ich eine Cloud fest als zusätzliches Laufwerk ...

Debian
SMS Gateway (API für PHP)
Frage von itnobbyDebian4 Kommentare

Hallo zusammen, ich habe folgenden IST-Zustand: - Debian Server (HyperV) - nginx Webserver - MySQL Datenbank - PHP Jetzt ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...