2017-03-15 5 views
-1

これは、プロジェクトMyFirstBotの下にあるプラグインフォルダ内のTwitchAPIexampleというファイルです。クラスとコードは以下の通りです:C#初心者 - 異なるクラスのクラスを使用する

using System.Net; 
using System.IO; 
using Newtonsoft.Json; 

namespace MyFirstBot.Plugins 
{ 
    public class TwitchAPIexample 
    { 

     private const string url = "https://api.twitch.tv/kraken/streams/<channel>"; 

     public bool isTwitchLive; 

     private static void BuildConnect() 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

      request.Method = "Get"; 
      request.Timeout = 12000; 
      request.ContentType = "application/json"; 
      request.Headers.Add("authorization", "<token>"); 

      using (System.IO.Stream s = request.GetResponse().GetResponseStream()) 
      { 
       using (StreamReader sr = new System.IO.StreamReader(s)) 
       { 
        var jsonResponse = sr.ReadToEnd(); 
        RootObject r = JsonConvert.DeserializeObject<RootObject>(jsonResponse); 
       } 
      } 
     } 


     public class Preview 
     { 
      public string small { get; set; } 
      public string medium { get; set; } 
      public string large { get; set; } 
      public string template { get; set; } 
     } 

     public class Channel 
     { 
      public bool mature { get; set; } 
      public string status { get; set; } 
      public string broadcaster_language { get; set; } 
      public string display_name { get; set; } 
      public string game { get; set; } 
      public string language { get; set; } 
      public int _id { get; set; } 
      public string name { get; set; } 
      public string created_at { get; set; } 
      public string updated_at { get; set; } 
      public bool partner { get; set; } 
      public string logo { get; set; } 
      public string video_banner { get; set; } 
      public string profile_banner { get; set; } 
      public object profile_banner_background_color { get; set; } 
      public string url { get; set; } 
      public int views { get; set; } 
      public int followers { get; set; } 
     } 

     public class Stream 
     { 
      public long _id { get; set; } 
      public string game { get; set; } 
      public int viewers { get; set; } 
      public int video_height { get; set; } 
      public int average_fps { get; set; } 
      public int delay { get; set; } 
      public string created_at { get; set; } 
      public bool is_playlist { get; set; } 
      public Preview preview { get; set; } 
      public Channel channel { get; set; } 
     } 

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


    } 

} 

は、私は何をする必要があることはMyFirstBotプロジェクトファイルの下に別のファイルに名前空間MyfirstBot.Pluginsのクラスを使用しています。私は持っています:

using namespace MyFirstBot.Plugins 

しかし、私はRootObjectの使い方がわかりません。私が使って試してみました:

TwitchAPIexample.stream TwitchLive = new TwitchAPIexample.stream() 

が、私は本当にTwitchAPIexampleクラスのすべてを操作するために、基本的にはどのように、文字列にそれらが等しくなるように設定、JSON内の他の文字列をチェックするためにそこから行く方法を知りません。

もう一度私はC#Noobだから、私のために書く必要はありませんが、あなたがそれを説明するか、良いリソースで私を打つことができれば。私はグーグルで、まだ混乱しています。 OOPは私の強い訴訟ではありません。

これは私の知る限り得ているようです。

namespace MyFirstBot 
{ 
    public class DiscordBot 
    { 
     DiscordClient client; 
     CommandService commands; 
     TwitchClient TwitchClient; 
     TwitchAPIexample.Stream TwitchLive = new TwitchAPIexample.Stream(); 
     public DiscordBot() 
     { 
      if(TwitchLive.equals(null)) 
      { 
       //stream is offline 
      } 
     } 
    } 
} 

私はこれが最善の方法であるかわかりません。

+0

あなた 'TwitchAPIexample'クラスにはありません'Stream'という名前のメソッドがあるので、このコード行は意味をなさない:' new TwitchAPIexample.Stream() '。どのストリームにアクセスしようとしていますか? –

+1

@IsaacKleinman - 'Stream'は' TwitchAPIexample'のネストされたクラスです。この例の文脈では、 'Stream'の新しいインスタンスを新しくしているので、使い方は理にかなっています。 –

+0

あなたが達成しようとしていることを達成するには、 'BuildConnect'メソッドを' rootObject'を返すように変更し、 'DiscordBot'クラスの' BuildConnect() 'を呼び出してjsonレスポンスの詳細を取得します。 –

答えて

0

あなたのアーキテクチャを少し変更する必要があるようです。静的メソッドは必要ありません.RootObjectにアクセスできるプロパティトラフを作成する必要があります。そして、あなたは本当にそれらのクラスを入れ子にする必要はありません。

public class TwitchAPIexample 
{ 

    private const string url = "https://api.twitch.tv/kraken/streams/<channel>"; 

    public bool IsTwitchLive { get; set; } 
    public RootObject Root { get; set; } 

    public TwitchAPIexample() 
    { 
     BuildConnect(); 
    } 

    private void BuildConnect() 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

     request.Method = "Get"; 
     request.Timeout = 12000; 
     request.ContentType = "application/json"; 
     request.Headers.Add("authorization", "<token>"); 

     using (System.IO.Stream s = request.GetResponse().GetResponseStream()) 
     { 
      using (StreamReader sr = new System.IO.StreamReader(s)) 
      { 
       var jsonResponse = sr.ReadToEnd(); 
       this.Root = JsonConvert.DeserializeObject<RootObject>(jsonResponse); 
      } 
     } 
    } 
} 

public class Preview 
{ 
    public string small { get; set; } 
    public string medium { get; set; } 
    public string large { get; set; } 
    public string template { get; set; } 
} 

public class Channel 
{ 
    public bool mature { get; set; } 
    public string status { get; set; } 
    public string broadcaster_language { get; set; } 
    public string display_name { get; set; } 
    public string game { get; set; } 
    public string language { get; set; } 
    public int _id { get; set; } 
    public string name { get; set; } 
    public string created_at { get; set; } 
    public string updated_at { get; set; } 
    public bool partner { get; set; } 
    public string logo { get; set; } 
    public string video_banner { get; set; } 
    public string profile_banner { get; set; } 
    public object profile_banner_background_color { get; set; } 
    public string url { get; set; } 
    public int views { get; set; } 
    public int followers { get; set; } 
} 

public class Stream 
{ 
    public long _id { get; set; } 
    public string game { get; set; } 
    public int viewers { get; set; } 
    public int video_height { get; set; } 
    public int average_fps { get; set; } 
    public int delay { get; set; } 
    public string created_at { get; set; } 
    public bool is_playlist { get; set; } 
    public Preview preview { get; set; } 
    public Channel channel { get; set; } 
} 

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

今、あなたは次の

namespace MyFirstBot 
{ 
    public class DiscordBot 
    { 
     DiscordClient client; 
     CommandService commands; 
     TwitchClient TwitchClient; 
     TwitchAPIexample twitchLive = new TwitchAPIexample(); 
     public DiscordBot() 
     { 
      if(twitchLive.Root == null || twitchLive.Root.Stream == null) 
      { 
       //stream is offline 
      } 
     } 
    } 
} 

ですから、twitchLive.Rootを使用して、ルートオブジェクトにアクセスし、ルートトラフされないことができ、あなたのストリームにアクセスすることができますtwitchLive.Root.Stream

関連する問題