Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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, 2464 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
Datenbanken
Datenbank API Automation

Link von Frank zum Thema Datenbanken ...

PHP
gelöst Amazon API - Versandupdate (5)

Frage von WPFORGE zum Thema PHP ...

Linux Tools
gelöst Icinga Director - Api User lässt sich nicht einrichten (1)

Frage von seltsam zum Thema Linux Tools ...

Linux
gelöst Umlaute zählen - Bash-Script (5)

Frage von plutowitsch zum Thema Linux ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
MSA 2050 RAID Konfig (25)

Frage von Leo-le zum Thema SAN, NAS, DAS ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (11)

Frage von RickTucker zum Thema Netzwerkmanagement ...

Outlook & Mail
Outlook Suche liefert kein Ergebnise mehr (6)

Frage von Bjoern-B zum Thema Outlook & Mail ...

Windows Server
gelöst "Kiosk"System für Demoversion und neue Versionen einer Anwendung (6)

Frage von kpieper zum Thema Windows Server ...