【C#】Yahoo雑談対話APIを試してみる
コンソール上で雑談会話APIと会話してみる
Yahoo雑談会話APIの利用登録
1. docomoのデベロッパーサイトへ行き、新規登録をする
dev.smt.docomo.ne.jp
ちなみに自分はGoogleアカウントで登録
3. アプリケーション登録をする。以下、主な設定値。
- アプリケーション名:任意
- アプリケーション概要:任意
- サービス開始日:任意
- アプリケーションタイプ:ネイティブアプリケーション
- コールバックURL:https://dummy(適当なURLです)
- 提供者名:任意
4. API機能選択
雑談対話にチェックを入れて[次へ] > [利用申請する]
実装
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(); }
【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
【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.net、Amazonアソシエイト、バリューコマース、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