• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:youtube api HASH(0x856eaec)の謎)

youtube apiの謎

このQ&Aのポイント
  • googlenewsのapiにつづいてyoutubeのapiと格闘しています。目標:youtubeのデータベースに人名で検索をかけ、その結果のリスト(XML)の中から、動画タイトルと動画IDを取り出す。
  • 動画タイトルを取り出すには、どの部分をどう修正すればいいのでしょうか?$ua->timeout(3);の部分で、タイムアウト処理をかましているつもりなのですが、どうも稼働している様には感じません。この様なプログラムの場合に、タイムアウト処理をかませるには、どうしたらよいのでしょうか?
  • 動画タイトルの部分がHASH(0x856eaec)といた様な表示になってしまうのです。どの様な状態の時に、HASH(0x856eaec)の様なものが表示されるのでしょうか(そもそも、これって何の値なんでしょうか?)

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>$titleyouと同じ扱い方をしている$urlyouや$idyouも、同様に、HASH(0x856eaec) の様な形で出力されると思うのですが、 > これらに関しては、求めている値(URLやID)が出力されます。 > この違いは何なのでしょうか? これは元のXMLデータがどのようなフォーマットになっているのか、 また、それを XML::TreePP がどのように解析するかの問題でしょう。 ですから違いは何か、といわれても違うように扱われる何かがあるんでしょうねえとしか。 > -type:#text > この1行のみが表示されました。 ということは、 $titleyou=$hash->{title}; $hash->{title} からたどれるハッシュには '-type' と '#text' という 二つのキーがあるということですね。 '#text'の方に本体があるっぽいので、 $titleyou = $hash->{title}->{#text}; とすればタイトルの文章が取れそうな気がします。 '-type' の方は何かの説明でも入るんですかねえ。 こっちも $hash->{title}->{-type}; で内容が取れるはずなんで、一応チェックしてみてください。

keeeeeeen
質問者

お礼

sakusaker7様へ 夜分に誠にありがとうございます。 >これは元のXMLデータがどのようなフォーマットになっているのか、 また、それを XML::TreePP がどのように解析するかの問題でしょう。 全く同じに取り扱っても、結果が全く違うフォーマットで出力されることがありうるのですね。XMLデータを見ると、どちらも単なる文字データとしか見えないので、TreePPの解析側に原因がありそうです。 >$hash->{title} からたどれるハッシュには '-type' と '#text' という >二つのキーがあるということですね。 -type:#textという1つのキーではなく、 '-type' と '#text' という2つのキーなのですね! (この点を勘違いしていました) >'#text'の方に本体があるっぽいので、 >$titleyou = $hash->{title}->{#text}; >とすればタイトルの文章が取れそうな気がします。 タイトルがとれました! ありがとうございます! >'-type' の方は何かの説明でも入るんですかねえ。 >こっちも >$hash->{title}->{-type}; >で内容が取れるはずなんで、一応チェックしてみてください。 チェックしてみたところ、全て text という文字が返ってきました。 文字データのタイプはtextですよ、という説明の様です。 ということは、文字タイプがtextという説明がある場合、TreePPは リファレンスを返す様にできている様です。 御陰で、今後、リファレンスの問題が起こった時、どうすればよいのかが分かりました(今まで、別のプログラムで、本筋と関係ないところで、偶然?同様の表示を目にしたことがありました)。 これで、 ●ハッシュ変数の謎 ●キーを取り出す方法 ●取り出されたキーの見方 ●キーから要素を取り出す方法 以上4点が分かりました。 これで前に進む事ができます。 この度は、丁寧に指導いただき、誠にありがとうございました! 心より感謝致します。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

>どの様な状態の時に、HASH(0x856eaec)の様なものが表示されるのでしょうか(そもそも、これって何の値なんでしょうか?) ハッシュリファレンスを通常の変数のように出力しようとしたときにそうなります。 ですので、その変数 $titleyou=$hash->{title}; ↑これですか? をさらにハッシュリファレンスであるとしてさらにデリファレンスしてやればよいです。 具体的にどういうハッシュなのかはわかりませんが、 とりあえず print join ':', keys %{$titleyou}; とかしてキーの一覧でもとってみれば見当がつくかもしれません。 #Data::Dumper などでダンプしてもいいですけど。

keeeeeeen
質問者

お礼

sakusaker7様 早速のアドバイス、ありがとうございます。 ハッシュリファレンスについて、あれこれ調べて、いろいろ試したのですが、なかなかうまくいきません、、、。 >ハッシュリファレンスを通常の変数のように出力しようとしたときにそうなります。 なるほど。そういうことですか! が、ここで1つ疑問が。 であれば、$titleyouと同じ扱い方をしている$urlyouや$idyouも、同様に、HASH(0x856eaec) の様な形で出力されると思うのですが、これらに関しては、求めている値(URLやID)が出力されます。 この違いは何なのでしょうか? >print join ':', keys %{$titleyou}; >とかしてキーの一覧でもとってみれば見当がつくかもしれません。 上記のプログラムの最後に、この一行を入れて表示させてみたところ、、、 -type:#text この1行のみが表示されました。 ここで行き詰まっています。 引き続きアドバイスいただければ幸です。

すると、全ての回答が全文表示されます。

関連するQ&A