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, 2437 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
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel: Text in Zellbereich prüfen mit Vergleichstext ggf. mit Exact-Funktion (5)

Frage von Michi1 zum Thema Microsoft Office ...

Microsoft Office
Office 2016 Probleme mit Outlook (5)

Frage von killtec zum Thema Microsoft Office ...

JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

Batch & Shell
gelöst Crontab mit Shell Probleme (9)

Frage von mschaedler1982 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...