Пример #1
0
 /**
  * docomoの対話APIを叩いてレスポンスを貰ってくる
  *
  * @param string $apikey    docomoAPIキー
  * @param string $context   会話のコンテキストID(API仕様参照)
  * @param string $mode      会話のモード(API仕様参照
  * @param string $nickname  会話している人間側の名前
  * @param string $text      人間側の入力テキスト
  * @return stdClass         レスポンスのJSONをデコードしたオブジェクト
  * @throws \Exception       サーバとの通信に失敗した場合
  */
 private function getData($apikey, $context, $mode, $nickname, $text)
 {
     $userData = ['utt' => (string) $text, 'context' => (string) $context, 'nickname' => (string) $nickname, 'mode' => (string) $mode];
     $url = sprintf('https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=%s', rawurlencode($apikey));
     Log::info("docomo対話APIを呼び出します");
     Log::info("URL: " . $url);
     Log::info("パラメータ:");
     Log::info($userData);
     $curl = new Curl();
     $curl->setHeader('Content-Type', 'application/json; charset=UTF-8');
     $ret = $curl->post($url, json_encode($userData));
     if ($curl->error) {
         Log::error(sprintf("docomo対話APIの呼び出しに失敗しました: %d: %s", $curl->error_code, $curl->error_message));
         throw new \Exception('docomo dialogue error: ' . $curl->error_code . ': ' . $curl->error_message);
     }
     Log::info("docomoからのデータ:");
     Log::info($ret);
     if (is_object($ret) && isset($ret->utt)) {
         if ($ret->utt == '') {
             Log::warning("  docomo 指示文章が空です");
         } else {
             Log::success("  docomo 指示文章: " . $ret->utt);
         }
         return $ret;
     }
     Log::error("docomoから受け取ったデータが期待した形式ではありません:");
     Log::error($ret);
     throw new \Exception('Received an unexpected data from docomo server');
 }
Пример #2
0
 /**
  * 現在の天気の情報を問い合わせる
  *
  * @return \bot\weather\yahoocom\Response
  * @throws \Exception 問い合わせに失敗した場合
  */
 public function query()
 {
     $queryUri = self::buildQueryUrl(['q' => $this->buildYql($this->city), 'format' => 'json', 'env' => 'store://datatables.org/alltableswithkeys']);
     Log::info(__METHOD__ . ': Query URL: ' . $queryUri);
     $curl = new Curl();
     $curl->get($queryUri);
     if ($curl->error) {
         $msg = 'YQL Query Error: ' . $curl->error_code . ': ' . $curl->error_message;
         Log::error(__METHOD__ . ': ' . $msg);
         Log::error($curl->raw_response);
         throw new \Exception($msg);
     }
     return new Response($curl->raw_response);
 }
Пример #3
0
 /**
  * ツイートを投稿する関数
  *
  * @param   object  $connection     投稿に使用する TwitterOAuth のインスタンス
  * @param   array   $param          Twitter に送信するパラメータ
  * @param   int     $retryLimit     最大再試行回数
  * @return  bool    投稿に成功すれば true、失敗すれば false
  */
 public static function postTweet(TwitterOAuth $connection, array $param, $retryLimit = 3)
 {
     Log::info("Twitter に tweet を POST します:");
     Log::info($param);
     for ($retry = 0; $retry < $retryLimit; ++$retry) {
         if ($retry > 0) {
             sleep(1);
         }
         $result = $connection->post('statuses/update', $param);
         if (is_object($result) && isset($result->id_str) && isset($result->text)) {
             Log::success("Tweet を投稿しました");
             Log::success(['id' => $result->id_str, 'text' => $result->text]);
             return true;
         }
         Log::warning("Tweet の投稿に失敗しました");
     }
     Log::error("Tweet を投稿できませんでした");
     Log::error($param);
     return false;
 }
Пример #4
0
} else {
    Log::warning("last_id.txtがありません。空のパラメータが送信されます。");
}
// ファイルの行をランダムに抽出
$randomFaces = new RandomSentenceList(__DIR__ . '/tweet_content_data_list/face_list.txt');
Log::trace("face_listは" . count($randomFaces) . "行です");
// Twitterに接続
$config = Config::getInstance();
$connection = new TwitterOAuth($config->getTwitterConsumerKey(), $config->getTwitterConsumerSecret(), $config->getTwitterAccessToken(), $config->getTwitterAccessTokenSecret());
// リプライを取得
Log::info("Twitter に問い合わせます。\nパラメータ:");
Log::info($param);
$res = $connection->get('statuses/mentions_timeline', $param);
if (!is_array($res)) {
    Log::error("Twitter から配列以外が返却されました:");
    Log::error($res);
    exit(1);
}
if (empty($res)) {
    Log::success("新着はありません");
    exit(0);
}
Log::success("Twitter からメンション一覧を取得しました。新着は " . count($res) . " 件です。");
// 最終投稿IDを書き込む
file_put_contents(__DIR__ . '/runtime/last_id.txt', $res[0]->id_str);
Log::trace("最終投稿IDを保存しました: " . $res[0]->id_str);
$success_count = 0;
$failure_count = 0;
$chat_context_manager = new ChatContextManager();
foreach ($res as $re) {
    $param = [];