質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

2188閲覧

PALRO プログラム C++ 

J.Spei

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/01/15 05:48

編集2022/01/12 10:55

PALROというロボットのプログラムです。
HTMLのサイトからタグを引き出してspeakで発話するプログラムなのですが、うまくURLをpageに取り込めてないのか、発話しません、どなたか力を貸してはいただけないでしょうか。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
#include "hevent.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <libxml/HTMLparser.h>
//SPCのインスタンスを定義する
Chevent spcApp;
//コンストラクタ
Chevent::Chevent() {
}
//デストラクタ
Chevent::~Chevent() {
}

void FindInfo(xmlNode*& element);
using namespace std;
//std::string str;
//SPC初期化イベント
void Chevent::onInitialize(){
enableNetwork();
speak("テストします");

// HTML用の構造体
htmlDocPtr m_doc;
char* sapo = "http://www.visit-hokkaido.jp/article/detail/2";
char* asah = "http://www.visit-hokkaido.jp/article/detail/11";
char* hako = "http://www.visit-hokkaido.jp/article/detail/7";
char* otar= "http://www.visit-hokkaido.jp/article/detail/8";
char* url;
//std::string str = std::string(url);

//札幌、函館、旭川、小樽を選択させる。
SPC_ANSWER answer;
std::vectorstd::string answerWords;
std::string recogWord;
int recogIndex;

//認識したい言葉を全角カタカナで追加する answerWords.push_back("サッポロ"); answerWords.push_back("アサヒカワ"); answerWords.push_back("ハコダテ"); answerWords.push_back("オタル"); //質問をする long rtn; rtn = waitForAnswer("札幌、旭川、函館、小樽から選んでください", answerWords, answer, recogWord, recogIndex); if(rtn != 0){ //waitForAnswer処理失敗 //アプリケーションの終了 exitComponent(); return; } switch(answer){ case SPC_ANSWER_RECOGEND: // ここに質問が正常終了した場合の処理を記述する // 認識した単語は、recogWord、および answerWords[recogIndex] で取得できる if(recogWord == "サッポロ"){ speak("札幌です"); url = sapo; } if(recogWord == "ハコダテ"){ speak("函館です"); url = hako; } if(recogWord == "アサヒカワ"){ speak("旭川です"); url = asah; } if(recogWord == "オタル"){ speak("小樽です"); url = otar; } break; case SPC_ANSWER_CANCEL: // ここに「やめる」を認識した時の処理を記述する break; case SPC_ANSWER_TIMEOUT: // ここに質問処理がタイムアウトした時の処理を記述する break; default: break; }

// ファイル名とエンコードの設定
char* file = url;
char* enc = "utf-8";
// xmlの読み込み
if (m_doc = htmlReadFile(file, enc, HTML_PARSE_RECOVER)) {
htmlNodePtr root = xmlDocGetRootElement(m_doc);
if (root != NULL) {
FindInfo(root);
}
xmlFreeDoc(m_doc);
m_doc = NULL;
}

xmlCleanupParser(); xmlCleanupCharEncodingHandlers(); speak("テストを終了します"); exitComponent();

}

void Chevent::FindInfo(xmlNode*& element) {
char* page;
for (htmlNodePtr node = element; node != NULL; node = node->next) {
if (node->type == XML_ELEMENT_NODE) {
//pタグを発話
if(xmlStrcasecmp(node->name, (const xmlChar*)"p") == 0){
page = (char*)node->children->content;
speak("概要です");
speak(page);
}
else if(xmlStrcasecmp(node->name, (const xmlChar*)"h2")==0){
page = ((char *)node->children->content);
speak("イベント名");
speak(page);
}
}

// 再帰読み込み
if(node->children != NULL)
{
FindInfo(node->children);
}
}
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

単体でspeakを呼んだときは発話されるのでしょうか?
デバッグログを取るような仕組みがないとなると、printfデバッグの様にspeakでデバッグしていくしかないのかもしれません。

投稿2016/01/15 11:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

J.Spei

2016/01/15 11:26

speakの中一部修正しました。 strではなくpageです。 ifの中に入れているかspeak調べた結果、pタグを発話と書いているところまでは通るのですが、pを参照しているifに入れません。 speak単体発話は可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問