2

twitch.tv ストリームがオンラインかどうかを c# 経由で確認しようとしています。現在私は持っています:

    private bool checkStream(String chan)
    {
        using (var w = new WebClient()) {

            String json_data = w.DownloadString("https://api.twitch.tv/kraken/streams/" + chan);
            JObject stream = JObject.Parse(json_data);
            print(json_data); //just for testing purposes
            if (stream["stream"] != null)
            {
                print("YIPPEE");
            }
        }

        return false;
    }

私がダウンロードしているものの単収縮 JSON API は次のとおりです: https://github.com/justintv/Twitch-API/blob/master/v2_resources/streams.md#get-streamschannel

ご覧のとおり、ストリームが現在オフラインの場合、streamフィールドにはnull. しかし明らかに、それはまだそこにあるので、私のif(stream["stream"]!=null)チェックは機能しません。JSON や Newtonsoft の json.net を使用したことがないので、どうすればよいか途方に暮れています。助けてくれてありがとう!

4

3 に答える 3

1

その Json 応答の完全なプロセッサを次に示します (免責事項:このコードにはhttp://json2csharp.com/を使用しました)。

public class Links
{
    public string channel { get; set; }
    public string self { get; set; }
}

public class Links2
{
    public string self { get; set; }
}

public class Links3
{
    public string stream_key { get; set; }
    public string editors { get; set; }
    public string subscriptions { get; set; }
    public string commercial { get; set; }
    public string videos { get; set; }
    public string follows { get; set; }
    public string self { get; set; }
    public string chat { get; set; }
    public string features { get; set; }
}

public class Channel
{
    public string display_name { get; set; }
    public Links3 _links { get; set; }
    public List<object> teams { get; set; }
    public string status { get; set; }
    public string created_at { get; set; }
    public string logo { get; set; }
    public string updated_at { get; set; }
    public object mature { get; set; }
    public object video_banner { get; set; }
    public int _id { get; set; }
    public string background { get; set; }
    public string banner { get; set; }
    public string name { get; set; }
    public string url { get; set; }
    public string game { get; set; }
}

public class Stream
{
    public Links2 _links { get; set; }
    public string broadcaster { get; set; }
    public string preview { get; set; }
    public long _id { get; set; }
    public int viewers { get; set; }
    public Channel channel { get; set; }
    public string name { get; set; }
    public string game { get; set; }
}

public class RootObject
{
    public Links _links { get; set; }
    public Stream stream { get; set; }
}

使用方法は次のとおりです。

bool StreamOnline = false;
using (var w = new WebClient())
{

    var jsonData = w.DownloadData("https://api.twitch.tv/kraken/streams/" +  + chan);
    var s = new DataContractJsonSerializer(typeof(RootObject));
    using (var ms = new MemoryStream(jsonData))
    {
        var obj = (RootObject)s.ReadObject(ms);
        StreamOnline = obj.stream == null;
    }

}
return StreamOnline;

System.Runtime.Serializationを参照して追加using System.Runtime.Serialization.Json;する必要があることに注意してくださいDataContractJsonSerializer。すべての詳細が必要ない場合はstream、タイプのプロパティをobjectRootObjectクラスで)作成し、それがそうであるかどうかを確認してくださいnull

于 2013-05-31T19:00:14.367 に答える
0

これを試しましたか。HasValues は、子トークンがあるかどうかをチェックする bool プロパティです。その値が null の場合、子トークンはありません。

if (stream["stream"].HasValues)
{
    print("YIPPEE");
}else
{
    print("No Stream");
}
于 2013-05-31T19:00:53.617 に答える