예제 #1
0
        public static async Task <LiveData> PostCommentAsync(IDataServer server, long live_id, long lastUpdatedAt, string comment, CookieContainer cc)
        {
            var url     = $"https://api.whowatch.tv/lives/{live_id}/comments";
            var headers = new Dictionary <string, string>
            {
                { "Referer", "https://whowatch.tv/" },
                { "Accept", "application/json" },
                { "Origin", "https://whowatch.tv" },
            };
            var dict = new Dictionary <string, string>
            {
                { "last_updated_at", lastUpdatedAt.ToString() },
                { "message", comment },
            };
            var res = await server.PostAsync(url, headers, dict, cc);

            //"Origin"を"https://whowatch.tv/"と間違って送信したら以下の文字列が返ってきた。コメント投稿に失敗した場合のレスポンスが来たら例外を投げるようにしたい。
            //また、その例外には問題解決のためにlive_idとかcookieとか動的な情報を出来るだけ網羅的に入れ込みたい
            //"{\"error_code\":\"Z-005\",\"error_message\":\"お使いのブラウザではご利用いただけません。お手数ですが、別のブラウザをお試しください。(Z-005)\"}"

            //live_idが0の時に返ってきた
            //{"error_code":"C-101","error_message":"指定された配信が見つかりません。(C-101)"}
            var d = DynamicJson.Parse(res);

            if (d.IsDefined("error_message"))
            {
                var errorMessage = (string)d.error_message;
                //throw new CommentPostFailedException()
                throw new Exception($"コメント投稿に失敗 error_message={errorMessage}, live_id={live_id}, comment={comment}");
            }
            var obj = Tools.Deserialize <Low.LiveData.RootObject>(res);

            return(Tools.Parse(obj));
        }
예제 #2
0
        internal static async Task <(Low.ResponseToPost.RootObject, string raw)> PostCommentAsync(
            IDataServer dataSource, string broadcasterId, long liveId, long lastCommentId, string comment, CookieContainer cc)
        {
            var url  = $"https://twitcasting.tv/{broadcasterId}/userajax.php?c=post";
            var data = new Dictionary <string, string>
            {
                { "m", liveId.ToString() },
                { "s", comment },
                { "o", broadcasterId },
                { "k", lastCommentId.ToString() },
                { "nt", "2" },
            };

            var str = await dataSource.PostAsync(url, data, cc);

            var obj = Tools.Deserialize <Low.ResponseToPost.RootObject>(str);

            return(obj, str);
        }
예제 #3
0
        public static async Task <string> GetWebsocketUrl(IDataServer server, long movie_id)
        {
            var url  = "https://twitcasting.tv/eventpubsuburl.php";
            var data = new Dictionary <string, string>
            {
                { "movie_id", movie_id.ToString() }
            };
            var res = await server.PostAsync(url, data, null);

            var d = DynamicJson.Parse(res);

            if (d.IsDefined("url"))
            {
                return(d.url);
            }
            else
            {
                return(null);
            }
        }