[C#]Upload foto naar TwitPic

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • PrePay
  • Registratie: Januari 2009
  • Laatst online: 07-09 00:34
Hallo,

ik heb een probleem bij een stukje code dat ik nu al zo'n 4 uur proberen werkend te krijgen.

De code upload een plaatje van een gebruiker op TwitPic.

Dit is mijn HTTP Post functie die ik heb aangepast.

Ik denk zelf dat er ergens bij:
+ "&media=" + fileData;
iets moet veranderen.

ik heb al een paar verschillende Encodings en zonder Encoding geprobeerd maar zonder resultaat.

Meestal krijg ik de error: "Wrong Parameters!".

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
        public static string UploadPhoto(byte[] binaryImageData, string tweetMessage, string filename, TweetClient data)
        {
            string AccessToken = data.oauthTokens.AccessToken;
            string AccessSecret = data.oauthTokens.AccessTokenSecret;
            if (string.IsNullOrEmpty(tweetMessage))
            {
                tweetMessage = " ";
            }

            string fileData = Encoding.GetEncoding("iso-8859-1").GetString(binaryImageData);

            string parameters = "key=" + Settings.TwitPic_Key
                + "&consumer_token=" + Settings.Twtr_ConsumerKey
                + "&consumer_secret=" + Settings.Twtr_ConsumerSecret
                + "&oauth_token=" + AccessToken
                + "&oauth_secret=" + AccessSecret
                + "&message=" + tweetMessage
                + "&media=" + fileData; //Ik denk dat hier iets moet veranderen want fileData is de data van het plaatje zelf

            WebRequest webRequest = WebRequest.Create(TWITPIC_UPLOAD_AND_POST_API_URL);
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Method = "POST";
            byte[] bytes = Encoding.ASCII.GetBytes(parameters);
            Stream os = null;
            try
            { // send the Post
                webRequest.ContentLength = bytes.Length;   //Count bytes to send
                os = webRequest.GetRequestStream();
                os.Write(bytes, 0, bytes.Length);         //Send it
            }
            catch (WebException ex)
            {
                return "ERROR|Unable to make Request. API Down?";
            }
            finally
            {
                if (os != null)
                {
                    os.Close();
                }
            }

            try
            { // get the response
                WebResponse webResponse = webRequest.GetResponse();
                if (webResponse == null)
                { return "ERROR|Unable to make Request. API Down?"; }
                StreamReader sr = new StreamReader(webResponse.GetResponseStream());

                string bla = sr.ReadToEnd().Trim();

                JsonTextParser test = new JsonTextParser();
                JsonObject jobject = test.Parse(bla);

                JsonObjectCollection collection = jobject as JsonObjectCollection;

                return "SUCCES|"+collection["url"].ToString();
            }
            catch (WebException ex)
            {
                var resp = (HttpWebResponse)ex.Response;
                if (resp.StatusCode == HttpStatusCode.NotFound)
                {
                    return "ERROR|Unable to make Request. API Down?";
                }
                else if (resp.StatusCode == HttpStatusCode.BadRequest)
                {
                    return "ERROR|Wrong Parameters!";
                }
                else if (resp.StatusCode == HttpStatusCode.Unauthorized)
                {
                    return "ERROR|Cannot login!";
                }
                else
                {
                    return "ERROR|Unknown Error!";
                }
            }
        } // end HttpPost 


C#:
1
2
byte[] image = TwitPic.ConvertImageToByteArray(Image.FromFile(DownloadFolder + @"\" + e.Filename), ImageFormat.Jpeg);
Console.WriteLine(TwitPic.UploadImage(image, "Image:", e.Filename, TweetManager._Tweetings[user.Mail]));


Verder weet ik door debuggen, zeker dat alle data die woorden opgevraagd uit andere classes kloppen.

Hopelijk kan iemand mij een tip geven over hoe ik dit kan laten werken.

Groeten,

Acties:
  • 0 Henk 'm!

  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 03-09 21:47
Deze links al gezien? Misschien kun je e.e.a. ander vergelijken met jouw eigen implementatie:

http://martinnormark.com/2009/03/10/c-twitpic-api-client
http://twipli.codeplex.com/

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


Acties:
  • 0 Henk 'm!

  • PrePay
  • Registratie: Januari 2009
  • Laatst online: 07-09 00:34
Die links had ik al gezien, Die zijn allebei verouderd. Die werken nog via Gebruikers naam en Wachtwoord van twitter en niet via oauth.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Volgens mij begrijp je het idee achter OAuth niet helemaal? Je mist behoorlijk wat parameters voor OAuth namelijk in je huidige script.

edit: een beetje aanrommelen met encodings zal natuurlijk (bijna) nooit de oplossing zijn ;)

[ Voor 26% gewijzigd door Cartman! op 03-07-2010 21:54 ]


Acties:
  • 0 Henk 'm!

  • PrePay
  • Registratie: Januari 2009
  • Laatst online: 07-09 00:34

Acties:
  • 0 Henk 'm!

  • PrePay
  • Registratie: Januari 2009
  • Laatst online: 07-09 00:34
Bump, Kan iemand mij nog tips geven?

Acties:
  • 0 Henk 'm!

  • Mental
  • Registratie: Maart 2000
  • Laatst online: 20-10-2020
Sure, vervang spaties in je message door een + teken, zoals in de documentatie ook aangegeven staat.

+ download wireshark en ga eens kijken wat er nou daadwerkelijk naar de server gestuurd wordt en wat de server exact terugstuurt; scheelt een hoop haaruitval.

[ Voor 44% gewijzigd door Mental op 16-07-2010 22:22 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Creëer met een webbrowser (Firefox of Chrome) een request en kijk vervolgens met de script-debugger of LiveHTTPHeaders eens wat er wordt meegestuurd (POST/GET) en of er nog bepaalde extra informatie verwacht wordt.
PrePay schreef op zaterdag 03 juli 2010 @ 19:44:
Meestal krijg ik de error: "Wrong Parameters!".
Ik zou hier eens even op Googlen, aangezien dit wel de boosdoener zal zijn. (obvious uiteraard)
Pagina: 1