Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

c# tweet plaatsen met afbeelding werkt niet meer

Pagina: 1
Acties:
  • 530 views

Verwijderd

Topicstarter
Beste Forum leden,

Tot voor kort gebruikte ik onderstaande code voor plaatsen van een tweet bericht + foto.
Door een api versie wijziging van API 1 naar API 1.1 bij twitter werkt deze code sinds enkele dagen niet meer. Wie kan mij hier mee opweg helpen ?

code:
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
    public partial class WebForm6 : System.Web.UI.Page
    {
        string twitterUrl1 = "http://api.twitter.com/1/statuses/update.xml?status=";
        string twitterUrl2 = "https://upload.twitter.com/1/statuses/update_with_media.xml";
        string imageFile = HttpContext.Current.Server.MapPath("/img/1659.jpg"); //Sample image

        string message;


        protected void Page_Load(object sender, EventArgs e)
        {

            message = "Mijn test bericht";
            Twitter();
        }


        private void Twitter()
        {
            var oauth = new OAuth.Manager();
            oauth["consumer_key"] = ConfigurationManager.AppSettings["ConsumerKey"];
            oauth["consumer_secret"] = ConfigurationManager.AppSettings["ConsumerSecret"];
            oauth["token"] = ConfigurationManager.AppSettings["AccessToken"];
            oauth["token_secret"] = ConfigurationManager.AppSettings["AccessTokenSecret"];

            var url = GetTwitterUpdateUrl();
            var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
            var request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "POST";
            request.PreAuthenticate = true;
            request.AllowWriteStreamBuffering = true;
            request.Headers.Add("Authorization", authzHeader);

            if (imageFile != null)
            {
                string boundary = "======" +  Guid.NewGuid().ToString().Substring(18).Replace("-", "") + "======";

                var separator = "--" + boundary;
                var footer = "\r\n" + separator + "--\r\n";

                string shortFileName = Path.GetFileName(imageFile);
                string fileContentType = GetMimeType(shortFileName);
                string fileHeader = string.Format("Content-Disposition: file; " +
                                                  "name=\"media\"; filename=\"{0}\"",
                                                  shortFileName);
                var encoding = System.Text.Encoding.GetEncoding("iso-8859-1");

                var contents = new System.Text.StringBuilder();
                contents.AppendLine(separator);
                contents.AppendLine("Content-Disposition: form-data; name=\"status\"");
                contents.AppendLine();
                contents.AppendLine(message);
                contents.AppendLine(separator);
                contents.AppendLine(fileHeader);
                contents.AppendLine(string.Format("Content-Type: {0}", fileContentType));
                contents.AppendLine();

                request.ServicePoint.Expect100Continue = false;
                request.ContentType = "multipart/form-data; boundary=" + boundary;
                // actually send the request
                using (var s = request.GetRequestStream())
                {
                    byte[] bytes = encoding.GetBytes(contents.ToString());
                    s.Write(bytes, 0, bytes.Length);
                    bytes = File.ReadAllBytes(imageFile);
                    s.Write(bytes, 0, bytes.Length);
                    bytes = encoding.GetBytes(footer);
                    s.Write(bytes, 0, bytes.Length);
                }
            }


            using (var response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    Boolean status = false;
                }
                else
                {
                    Boolean status = true;
                }

            }
        }

        private string GetTwitterUpdateUrl()
        {
            return (imageFile == null) ?
                twitterUrl1 + message : twitterUrl2;
        }

        private static string GetMimeType(String filename)
        {
            var extension = System.IO.Path.GetExtension(filename).ToLower();
            var regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(extension);

            string result =
                ((regKey != null) && (regKey.GetValue("Content Type") != null))
                ? regKey.GetValue("Content Type").ToString()
                : "image/unknown";
            return result;
        }

    }

  • sliepie
  • Registratie: Augustus 2006
  • Laatst online: 19-11 10:47
Wat heb jezelf zoal gedaan om het probleem te fixen?

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 13:04

F.West98

Alweer 16 jaar hier

Kijk eens naar de URL's ;)

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


Verwijderd

Topicstarter
Die heb ik al geprobeerd aan te passen naar

string twitterUrl1 = "http://api.twitter.com/1.1/statuses/update.xml?status=";
string twitterUrl2 = "https://upload.twitter.com/1.1/statuses/update_with_media.xml";

maar dat werkt helaas niet.

  • sliepie
  • Registratie: Augustus 2006
  • Laatst online: 19-11 10:47
Verwijderd schreef op zaterdag 15 juni 2013 @ 16:42:
string twitterUrl1 = "http://api.twitter.com/1.1/statuses/update.xml?status=";
string twitterUrl2 = "https://upload.twitter.com/1.1/statuses/update_with_media.xml";
Als je gebruik maakt van de v1.1, van de twitter api, moet je je authenticeren.

Verwijderd

Topicstarter
12432 schreef op zaterdag 15 juni 2013 @ 17:00:
[...]


Als je gebruik maakt van de v1.1, van de twitter api, moet je je authenticeren.
Maar dat gebeurt hier toch al of niet ?

code:
1
2
3
4
5
6
7
8
9
var oauth = new OAuth.Manager();
            oauth["consumer_key"] = ConfigurationManager.AppSettings["ConsumerKey"];
            oauth["consumer_secret"] = ConfigurationManager.AppSettings["ConsumerSecret"];
            oauth["token"] = ConfigurationManager.AppSettings["AccessToken"];
            oauth["token_secret"] = ConfigurationManager.AppSettings["AccessTokenSecret"];

            var url = GetTwitterUpdateUrl();
            var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
            var request = (HttpWebRequest)WebRequest.Create(url);

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Sorry hoor, maar ik vind de openingspost erg summier.
Je zou kunnen beginnen met:
- wat is je probleem?
- krijg je een fout? Welke?
- heb je het kunnen traceren tot een bepaald code fragment?

Dit klinkt een beetje als "ik heb een probleem, fix het even voor me!"

Signature van nature


Verwijderd

Topicstarter
Jammer dat het zo gezien wordt. Ik stel gewoon een vraag waar dit forum voor bedoeld is
En nee ik verwacht echt niet meteen een fix. Een uitleg of een tip is ook welkom. Waarom zou ik het wiel op nieuw uitvinden als iemand anders dit al eens bij de hand heeft gehad.

Het probleem is dat twitter api versie 1.0 afgesloten heeft.
Hierdoor werkt deze code niet meer. De Foutmelding die je terugkrijgt is 410.
Betekenis foutmelding: Api verwijdert.

Deze foutmelding verschijnt bij regel 74

code:
1
2
3
using (var response = (HttpWebResponse)request.GetResponse())
{
}

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 25-10 14:28
Als er geen versie 1 meer is dan moet je de volgende versie gebruiken. Probleem opgelost. Als dat je niet lukt kun je altijd nog even aangeven waar het met de upgrade misgaat, wat dan de foutmeldingen zijn, etc.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zaterdag 15 juni 2013 @ 19:45:
Jammer dat het zo gezien wordt. Ik stel gewoon een vraag waar dit forum voor bedoeld is
En nee ik verwacht echt niet meteen een fix. Een uitleg of een tip is ook welkom.
Nou, je topicstart mist nogal wat punten uit onze Quickstart waarin we vragen te laten zien wat je zelf al geprobeerd, gezocht/gevonden hebt etc. Je topicstart is anderhalve regel probleemomschrijving en een 100+ regels tellende codedump die wij dan vervolgens voor je mogen gaan uitpluizen; dat is niets minder dan een Kan iemand even...? ofwel: wil iemand mijn code even debuggen. Vandaar de reacties zoals ze zijn.
Verwijderd schreef op zaterdag 15 juni 2013 @ 19:45:
Waarom zou ik het wiel op nieuw uitvinden als iemand anders dit al eens bij de hand heeft gehad.
Toch is dat precies wat je al gedaan hebt en de reden waarom je nu extra werk hebt; had je één van de vele, vele Twitter libraries gebruikt dan had alles nog gewerkt of had desnoods een "update nuget package" in 95% van de gevallen volstaan. Waarom zo omslachtig doen met zelf oAuth implementeren, POSTs handmatig te gaan bouwen met stringbuilders etc.?

Open gerust een nieuw topic als je nog hulp nodig hebt, maar post dan a.u.b. enkel relevante(!) stukken code (beperk 't tot 't probleem) en hanteer eerder genoemde quickstart en dan komt 't allemaal helemaal goed ;)

[ Voor 4% gewijzigd door RobIII op 15-06-2013 20:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.