HUSKING - kotteri

技術系Note

【C#】Yahoo雑談対話APIを試してみる

コンソール上で雑談会話APIと会話してみる

Yahoo雑談会話APIの利用登録

1. docomoデベロッパーサイトへ行き、新規登録をする

dev.smt.docomo.ne.jp
ちなみに自分はGoogleアカウントで登録

2. 利用申請

マイページより[API利用申請・管理] > [新規API利用申請へ]

3. アプリケーション登録をする。以下、主な設定値。

  • アプリケーション名:任意
  • アプリケーション概要:任意
  • サービス開始日:任意
  • アプリケーションタイプ:ネイティブアプリケーション
  • 提供者名:任意
  • サポートメールアドレス:登録したGoogleアカウントGmail(書式だけあってれば存在しないメールアドレスでも可)

4. API機能選択

雑談対話にチェックを入れて[次へ] > [利用申請する]

5. 登録完了

すぐに登録が完了。マイページより[API利用申請・管理]で登録内容(API keyなど)を確認できる

実装

1. リクエスト用のデータクラスを生成

APIとのやり取りはJSONで行う。以下を参考にデータクラスを作成
husk.hatenablog.com

using System.Runtime.Serialization;
 
namespace ConsoleApplication1
{
    [DataContract]
    class RequestData
    {
        [DataMember]
        public string utt { get; set; }
        [DataMember]
        public string context { get; set; }
        [DataMember]
        public string nickname { get; set; }
        [DataMember]
        public string nickname_y { get; set; }
        [DataMember]
        public string sex { get; set; }
        [DataMember]
        public string bloodtype { get; set; }
        [DataMember]
        public string birthdateY { get; set; }
        [DataMember]
        public string birthdateM { get; set; }
        [DataMember]
        public string birthdateD { get; set; }
        [DataMember]
        public string age { get; set; }
        [DataMember]
        public string constellations { get; set; }
        [DataMember]
        public string place { get; set; }
 
        [DataMember]
        public string mode { get; set; }
        [DataMember]
        public string t { get; set; }
    }
}

2. APIからのレスポンスを格納するデータクラスを作成

using System.Runtime.Serialization;

namespace ConsoleApplication1
{
    [DataContract]
    class ResponseData
    {
        [DataMember]
        public string utt { get; set; }
        [DataMember]
        public string yomi { get; set; }
        [DataMember]
        public string mode { get; set; }
        [DataMember]
        public string da { get; set; }
        [DataMember]
        public string context { get; set; }
    }
}

3. APIへリクエストを投げる用のメソッドを作成

以下を参考
husk.hatenablog.com

private async Task<string> getRequest(string url, string message)
{
    try
    {
        using (HttpClient client = new HttpClient())
        {
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
            
            // リクエストデータを生成(必要最低限だけ)
            RequestData reqData = new RequestData();
            reqData.utt = message;
            reqData.mode = "dialog";
            string json = JsonUtils.ToJson(reqData);
            request.Content = new StringContent(json, Encoding.UTF8, "application/json");
            var response = await client.SendAsync(request);
            return await response.Content.ReadAsStringAsync();
        }
    }
    catch(Exception ex)
    {
        throw ex;
    }
}

実際に試す

static void Main(string[] args)
{
    string url = "https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=";
    string key = "取得したAPIKEY";
    url += key;

    do
    {
        string input = Console.ReadLine();
        if (!string.IsNullOrEmpty(input))
        {
            if (input.Equals("exit"))
            {
                break;
            }
            getRequest(url, input).ContinueWith(
                (task) =>
                {
                    string json = task.Result;
                    ResponseData resData = JsonUtils.ToObject<ResponseData>(json);
                    Console.Write(">> ");
                    Console.WriteLine(resData.utt);
                    contextId = resData.context;
                });
        }
    } while (true);
    Console.WriteLine("\nStopped..");
    Console.ReadLine();
}

コンソール出力

>>の箇所がAPIからの返事

こんにちは
>> やぁ

【C#】正規表現

準備

using System.Text.RegularExpressions;

半角数字のみ

string target1 = "0123";
string target2 = "a012";
Regex regex = new Regex(@"^[0-9]+$");

Console.WriteLine(regex.IsMatch(target1));
Console.WriteLine(regex.IsMatch(target2));

コンソール出力結果

True
False

半角英数字のみ

string target1 = "Pass0123";
string target2 = "Pass_0123";
Regex regex = new Regex(@"^[a-zA-Z0-9]+$");

Console.WriteLine(regex.IsMatch(target1));
Console.WriteLine(regex.IsMatch(target2));

コンソール出力結果

True
False

特定文字「¥」,「&」,「?」,「"」,「半角スペース」,「+」が含まれているか

string target1 = "Pass 0123";
string target2 = "Pass+0123";
string target3 = "Pass_0123";
Regex regex = new Regex(@"¥¥|&|¥?|¥s|¥+");

Console.WriteLine(regex.IsMatch(target1));
Console.WriteLine(regex.IsMatch(target2));
Console.WriteLine(regex.IsMatch(target3));

コンソール出力結果

True
True
False

【個人アプリ開発】そろそろ次のアプリ開発に着手しようかな

このブログもある程度落ちついてきたので、そろそろ次のアプリ開発を。


どんなアプリ

  • 次もツール系
  • XAMARINを使う
  • 前と同じように自分が使いたいもの

試してみたいこと

  • グラフ(棒グラフか折れ線グラフ)

その他

  • ストアにアップするキャプチャ画像をもう少し気合い入れる(アピールする)

目標

  • 10インストール!!

【C#】HttpClientを使ってみる(POST)

HttpClientを使用してJSON形式のデータをPOSTしてみる

リクエストメソッド作成

using System.Net.Http; // ←追加

private static HttpClient client = new HttpClient();

private async Task<string> sendRequest(string url, string json)
{
      // メソッドにPOSTを指定
      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
      // 今回はJSONをPOSTしてみる
      request.Content = new StringContent(json, Encoding.UTF8, "application/json");
      // リクエストを送信し、その結果を取得
      var response = await client.SendAsync(request);
      // 取得した結果をstring形式で返す
      return await response.Content.ReadAsStringAsync();
}

作成したリクエストメソッドの使用例

static void Main(string[] args)
{
   string url = "http://******"; // post先
   string json = "{\"age\":\"44歳\",\"name\":\"大泉 洋\"}"; // 送信するJSON

  // リクエスト送信して、タスクの返りを待つ
   sendRequest(url, json).ContinueWith(
       (task) =>
       {
           // レスポンスを取得
           string responseData = task.Result;
       });
}

【C#】VB6のLeftB関数をC#で書いてみる

シフトJIS

//----------------------------------------
// 文字列の左端から指定したバイト数分の文字列を返す(シフトJIS)
//----------------------------------------
string target = "はてなBLOG";
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(932);
byte[] bytes =  encoding.GetBytes(target);
// 左から6バイト分の文字列を取得
string str = encoding.GetString(bytes, 0, 6);

Console.WriteLine(str);


コンソール出力結果

はてな

UTF-8

//----------------------------------------
// 文字列の左端から指定したバイト数分の文字列を返す(UTF-8)
//----------------------------------------
string target = "はてなBLOG";
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
byte[] bytes =  encoding.GetBytes(target);
// 左から6バイト分の文字列を取得
string str = encoding.GetString(bytes, 0, 6);

Console.WriteLine(str);


コンソール出力結果

はて

【C#】VB6のLenB関数をC#で書いてみる

シフトJIS

//----------------------------------------
// 文字列のバイト数を取得(シフトJIS)
//----------------------------------------
string target = "はてなBLOG";
int cnt = System.Text.Encoding.GetEncoding(932).GetByteCount(target);

Console.WriteLine(cnt);


コンソール出力結果

10

UTF-8

//----------------------------------------
// 文字列のバイト数を取得(UTF-8)
//----------------------------------------
string target = "はてなBLOG";
int cnt = System.Text.Encoding.GetEncoding("utf-8").GetByteCount(target);

Console.WriteLine(cnt);


コンソール出力結果

13

プライバシーポリシー

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(GoogleアドセンスA8.netAmazonアソシエイトバリューコマースiTunes アフィリエイトプログラム)を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。
またGoogleアドセンスに関して、このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、こちらをクリックしてください。

当サイトが使用しているアクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。
このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。
この規約に関して、詳しくは
こちら→https://marketingplatform.google.com/about/analytics/terms/jp/
または、
こちら→https://policies.google.com/technologies/partner-sites?hl=ja
をクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人であるHuskが事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

  • 特定の自然人または法人を誹謗し、中傷するもの。
  • 極度にわいせつな内容を含むもの。
  • 禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
  • その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。
当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。
修正された最新のプライバシーポリシーは常に本ページにて開示されます。

2018年07月23日 huskworks53