ToString() private static méthode

private static ToString ( object>.IDictionary dic ) : string
dic object>.IDictionary
Résultat string
Exemple #1
0
        public TokenPair AccessToken(string verifier)
        {
            try
            {
                var obj  = new { oauth_verifier = verifier };
                var buff = Encoding.UTF8.GetBytes(OAuth.ToString(obj));

                var req = MakeRequest("POST", "https://api.twitter.com/oauth/access_token", obj);
                req.GetRequestStream().Write(buff, 0, buff.Length);

                using (var res = req.GetResponse())
                    using (var reader = new StreamReader(res.GetResponseStream()))
                    {
                        var str = reader.ReadToEnd();

                        var token = new TokenPair();
                        token.Token  = Regex.Match(str, @"oauth_token=([^&]+)").Groups[1].Value;
                        token.Secret = Regex.Match(str, @"oauth_token_secret=([^&]+)").Groups[1].Value;

                        return(token);
                    }
            }
            catch
            {
                return(null);
            }
        }
        /// <summary>
        /// 트윗을 게시합니다.
        /// </summary>
        /// <param name="songinfo">트윗할 SongInfo 객체</param>
        /// <returns>트윗 성공 여부</returns>
        public bool Publish(SongInfo songinfo)
        {
            if (songinfo == null)
            {
                return(false);
            }

            string mediaId = null;

            var stream = ImageResize.LoadImageResized(songinfo.Cover);

            if (stream != null)
            {
                try
                {
                    var req = OAuth.MakeRequest("POST", "https://upload.twitter.com/1.1/media/upload.json");

                    using (stream)
                    {
                        var buff = new byte[4096];
                        var read = 0;

                        var boundary = Guid.NewGuid().ToString("N") + Guid.NewGuid().ToString("N");
                        var bef      = Encoding.UTF8.GetBytes(string.Format("--{0}\r\nContent-Type: application/octet-stream\r\nContent-Disposition: form-data; name=\"media\";\r\n\r\n", boundary));
                        var aft      = Encoding.UTF8.GetBytes(string.Format("\r\n\r\n--{0}--\r\n", boundary));

                        req.ContentType = "multipart/form-data; boundary=" + boundary;

                        using (var writer = new BinaryWriter(req.GetRequestStream()))
                        {
                            writer.Write(bef);
                            while ((read = stream.Read(buff, 0, 4096)) > 0)
                            {
                                writer.Write(buff, 0, read);
                            }
                            writer.Write(aft);
                        }
                    }

                    using (var res = req.GetResponse())
                        using (var reader = new StreamReader(res.GetResponseStream()))
                            mediaId = m_media.Match(reader.ReadToEnd()).Groups[1].Value;
                }
                catch
                {
                    mediaId = null;
                }
            }

            //////////////////////////////////////////////////

            var text = songinfo.ToString(mediaId != null);

            if (string.IsNullOrWhiteSpace(text))
            {
                return(false);
            }

            if (TwitterCommunicator.m_lastStr == text)
            {
                return(true);
            }
            TwitterCommunicator.m_lastStr = text;

            //////////////////////////////////////////////////

            object obj;

            if (mediaId != null)
            {
                obj = new { status = text, media_ids = mediaId }
            }
            ;
            else
            {
                obj = new { status = text }
            };

            try
            {
                var buff = Encoding.UTF8.GetBytes(OAuth.ToString(obj));

                var req = OAuth.MakeRequest("POST", "https://api.twitter.com/1.1/statuses/update.json", obj);
                req.GetRequestStream().Write(buff, 0, buff.Length);

                using (var res = req.GetResponse())
                    using (var reader = new StreamReader(res.GetResponseStream()))
                        return(reader.ReadToEnd() != null);
            }
            catch (WebException ex)
            {
                if (ex.Response != null)
                {
                    using (var res = ex.Response)
                        using (var reader = new StreamReader(res.GetResponseStream()))
                        {
                            this.m_lastError = reader.ReadToEnd();

                            try
                            {
                                var m = m_error.Match(this.m_lastError);
                                this.m_lastError = m.Groups[1].Value;

                                // 중복 트윗인 경우에는 에러 메시지를 작성하지 않는다
                                if (this.m_lastError.IndexOf("duplica") >= 0)
                                {
                                    return(true);
                                }
                            }
                            catch
                            { }
                        }
                }
                return(false);
            }
            catch
            {
                return(false);
            }
        }
Exemple #3
0
        public WebRequest MakeRequest(string method, string url, object data = null)
        {
            method = method.ToUpper();
            var uri = new Uri(url);
            var dic = new SortedDictionary <string, object>();

            if (!string.IsNullOrWhiteSpace(uri.Query))
            {
                OAuth.AddDictionary(dic, uri.Query);
            }

            if (data != null)
            {
                OAuth.AddDictionary(dic, data);
            }

            if (!string.IsNullOrWhiteSpace(this.User.Token))
            {
                dic.Add("oauth_token", UrlEncode(this.User.Token));
            }

            dic.Add("oauth_consumer_key", UrlEncode(this.App.Token));
            dic.Add("oauth_nonce", OAuth.GetNonce());
            dic.Add("oauth_timestamp", OAuth.GetTimeStamp());
            dic.Add("oauth_signature_method", "HMAC-SHA1");
            dic.Add("oauth_version", "1.0");

            var hashKey = string.Format(
                "{0}&{1}",
                UrlEncode(this.App.Secret),
                this.User.Secret == null ? null : UrlEncode(this.User.Secret));
            var hashData = string.Format(
                "{0}&{1}&{2}",
                method.ToUpper(),
                UrlEncode(string.Format("{0}{1}{2}{3}", uri.Scheme, Uri.SchemeDelimiter, uri.Host, uri.AbsolutePath)),
                UrlEncode(OAuth.ToString(dic)));

            using (var hash = new HMACSHA1(Encoding.UTF8.GetBytes(hashKey)))
                dic.Add("oauth_signature", UrlEncode(Convert.ToBase64String(hash.ComputeHash(Encoding.UTF8.GetBytes(hashData)))));

            var sbData = new StringBuilder();

            sbData.Append("OAuth ");
            foreach (var st in dic)
            {
                if (Array.IndexOf <string>(oauth_array, st.Key) >= 0)
                {
                    sbData.AppendFormat("{0}=\"{1}\",", st.Key, Convert.ToString(st.Value));
                }
            }
            sbData.Remove(sbData.Length - 1, 1);

            var str = sbData.ToString();

            var req = (HttpWebRequest)WebRequest.Create(uri);

            req.Method = method;
            req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            req.UserAgent = "Decchi";
            req.Headers.Add("Authorization", sbData.ToString());

            if (method == "POST")
            {
                req.ContentType = "application/x-www-form-urlencoded";
            }

            return(req);
        }