YAHOO ウェブ検索Web APIを使ったプログラムの問題と解決策

このQ&Aのポイント
  • YAHOO ウェブ検索Web APIを使ったプログラムにおいて、特定のキーワードを使用すると異なる検索結果が返ってくる問題が発生しています。解決策として、APIから返ってきた結果をutf-8にデコードすることで解決することができました。
  • また、文字化けの問題も関連している可能性があります。過去に他のプログラムでも文字化けの問題が発生していましたが、それも解決しています。
  • この問題については原因が不明であり、APIから返ってくる結果自体が異なる場合もあります。詳細な解説が難しいですが、詳しい情報を提供いただければ幸いです。
回答を見る
  • ベストアンサー

YAHOO ウェブ検索Web APIを使ったプログラム

perlのペーペープログラマーです とりあえず動けばOK的にしか作れないレベルです 現在YAHOO ウェブ検索Web APIを使ったプログラムを作成しています (プログラム、フォーム用、結果表示用のHTMLなどもutf-8で記述) 大体普通に動くのですが一部キーワードを使うとなぜか違う検索結果が返ってきます 例:SEOツール 1.返ってくるべきページ http://search.yahoo.co.jp/search?p=SEO%E3%83%84%E3%83%BC%E3%83%AB 2.なぜか受け取るページ http://search.yahoo.co.jp/search?p=SEO%83c%81[%83%8B なぜか2のshift-jisっぽいものが返ってきます 他のキーワードなどでは普通のUTF-8のページが返ってきます 文字化けなどはほとんどありません 正直まったく原因が分かりません いったい何をどうすれば良いのでしょうか? ソースは下記みたいな感じです &decode; #デコードサブルーチン use LWP::Simple; use XML::Simple; $url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=$appid&query=$in{'keyword'}"; $response = get($url); $xml = new XML::Simple; $yahoo_xml = $xml->XMLin($response); $tra = $yahoo_xml->{totalResultsAvailable}; $page = <<"EOF"; $tra EOF &page; #ページ表示サブルーチン $pageを表示 ちなみに文字化けは他プログラムでは発生していましたが解決しました 関連性があるのでしょうか? 問題 APIから帰ってきたものを@lineに入れてHTML表示 それ以外の変数文字列が文字化け 解決策 APIから返ってきたものをforeachでutf-8にデコードしたら他のものが普通に表示されました。 foreach (@line) {Jcode::convert($_, "utf8");} こんな感じです これは返ってきたものなので、そもそも返って来るものが違う場合もうお手上げです。 何がなにやら分かりません 上手に説明できませんでしたが、よろしくお願いいたします また教えてgooへの投稿に慣れていないもので至らない点あるかと思いますがご容赦ください

  • Perl
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
回答No.1

僕も前似たようなことしたのでお答えさせていただきます 僕のケースは検索結果が違うのは間違いでした totalResultsAvailableの項目を抜き出してみてください ちゃんとUTFの方のページと同じ数字になるはずです 多分僕と同じキーワードで同じURLをチェックしたのだと思います 僕のケースだとフラグの立て方が甘くて1回目をスルーして2回目の結果がヒットしてちょうどshift-jisの方と似たような位置にあったので間違えました 参考になれば幸いです 下記に参考ページのリンクも掲載していますのでチェックしていてみてください

参考URL:
http://www.geekpage.jp/web/yahoo-developer/
shiro4649
質問者

お礼

まさに仰るとおりの状態でした かなり恥ずかしい感じですがおかげさまで無事解決いたしました 誠にありがとうございました

関連するQ&A

  • Yahoo APIのXMLの取得について

    Yahoo APIのXMLで総数(totalResultsAvailable)を取得したいのですが、取得できません。 $url = "http://api.search.yahoo.co.jp/WebSearchService/xx/webSearch?appid=xxxxx&query=$query"; $xml= simplexml_load_file($url); $yahooxml=$xml->Result->Item ; $totalResults = $yahooxml->{totalResultsAvailable}; print_r ($totalResults); $urlは問題なく値が入ってるのですが、$totalResults ではSimpleXMLElement Object ( ) と返ってきてしまいます。どうすれば、$totalResults の値を取得できるのでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Yahoo API  WEB検索の事で!

    Yahoo API を利用してWEB検索の機能を使おうと考えています。 そこで、 Yahoo!デベロッパーネットワーク - サンプルコード集 ;検索サンプルコード http://developer.yahoo.co.jp/sample/search/sample1.html このページよりphpファイルをダウンロードして試し一応成功しました。 http://cgi.geocities.jp/ydevnet/sample/search/sample1/YJSearchExample.php (このページはサンプルです) 検索結果を見てみるとごちゃごちゃしていて見にくいです。 そこで以下のようなページにしたいのですが http://phpspot.org/lab/yapi/web.php?q=yahoo 簡単に修正できないでしょうか? ファイルは ・common.php ・YJSearchExample.php なのですが、どの辺りを修正すればいいでしょうか? ご指導よろしくお願いします。

    • 締切済み
    • PHP
  • yahoo API ASP.NETで表示させるには

    お世話になります 環境 Windowsxp pro asp.net vb ACCESS(テーブル) 超初心者 Yahoo APIですが下記を参考中に作成しています http://www.atmarkit.co.jp/fdotnet/dotnettips/477 aspx-------------------------------------------------------------- <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default6.aspx.vb" Inherits="loop_Default6" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>webAPI</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="txtKeyword" runat="server"></asp:TextBox> <asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" Text="検索" /> <br /> <asp:BulletedList ID="list" runat="server" DataSourceID="Xml" DataTextField="Title" DataValueField="Url" DisplayMode="HyperLink"> </asp:BulletedList> <asp:XmlDataSource ID="Xml" runat="server" DataFile="http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=自分のID&query=apiとは?&results=20" TransformFile="~/App_Data/YahooSearch.xsl"></asp:XmlDataSource> <br /> </div> </form> </body> </html> aspx.vb Partial Class loop_Default6 Inherits System.Web.UI.Page Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click Xml.DataFile = _ "http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=自分のID&query=" _ & Server.UrlEncode(txtKeyword.Text) & "&results=50" End Sub End Class xsl--------------------------------------------- <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:yahoo="urn:yahoo:jp:srch" version="1.0"> <xsl:template match="/yahoo:ResultSet"> <ResultSet> <xsl:for-each select="yahoo:Result"> <Result> <xsl:attribute name="Title"> <xsl:value-of select="yahoo:Title" /> </xsl:attribute> <xsl:attribute name="Url"> <xsl:value-of select="yahoo:Url" /> </xsl:attribute> </Result> </xsl:for-each> </ResultSet> </xsl:template> </xsl:stylesheet> -------------------------------------------- 現在は表示ぐらいまでならできました これをyahooオークションで転用したいのですが ASP.NETでググってもあまりHITしません 分かる方初心者ですがご教授願います

  • yahooページ検索とgoogleは同じ結果が出ると思っていたのに。。

    yahooのページ検索は、googleを利用していると聞いています。自分のHPを更新して、あるキーワードで23番目から17番目にランクアップしました。ところが、yahooのページ検索では、自分のHPが表示されなくなりました。 そこで、あるキーワード、例えば、「コンピュータ」をキーワードとして、yahooのページ検索結果数とgoogleの検索結果数を比べると、前者の方がずっと少ないのです。つまり、googleで検索して表示されるページでもyahooのページ検索で現れないHPが多数あるということです。これはどういうことなのでしょうか? ちなみに素人ながら、SEOを考えて、トップページのドキュメントサイズを軽くし、キーワードのページ内での出現回数の比率を多少多くしました。これが原因でスパムと判断されたのでしょうか? 商売に関わる問題でもあり、とまどっております。 どうかよろしくご指導お願い致します。

  • YAHOO検索順位の上げ方について教えて下さい。

    YAHOOでの検索上位表示ついて教えて下さい。 現在、「フリーエンジニア」というキーワードでSEO対策をしており、皆様のお助けもあり、YAHOO順位を11位まで上げることが出来ました。 特に有効な方法があれば教えて下さい。 また、index数を増やすことが出来ればさらなるページのアップに繋がると思いますが、有効な方法がありましたら教えて下さい。

  • Googleの検索結果をXMLで取得したいのですが、Yahooのような

    Googleの検索結果をXMLで取得したいのですが、YahooのようなWEBサービスはありませんか? Google AJAX Search APIを使うと取得出来そうなのですが、件数に制限があるようで機能不足です。

  • WebAPIのマッシュアップ方法について[Webサービスの作り方]

    マッシュアップというものをやりたいと思っています。 例えばAPIはYahooデベロッパー http://developer.yahoo.co.jp/search/webunit/V1/webunitSearch.html のものを使うとして、 リクエストURL http://api.search.yahoo.co.jp/AssistSearchService/V1/webunitSearch にリクエストパラメータを付加すると(サンプルコードです) http://api.search.yahoo.co.jp/AssistSearchService/V1/webunitSearch? appid=YahooDemo&query=%e6%b2%96%e7%b8%84&results=2 とするとこうなるということですが、 質問(1)まずquery=%e6%b2%96%e7%b8%84 という検索クエリーというものがよく分かりません。どう決めればよいのでしょうか? 質問(2)データベースについての知識はないのですが、もし必要ならどのような知識がどんなところに必要でしょうか?(例で示して下さると助かります) 質問(3)そして、このアドレスにアクセスするとXML形式で結果が返ってきますよね。これをどう使っていくのかいまいちよく分かりません。解説サイトを探してみたりもしましたが、抽象的で過程を省いているものが多く (1:○○する、2:○○する・・・と細かく説明されていればいいのですが・・)質問するに至りました。 関係ありそうな技術の現時点での到達度を書いておきます。 PHP、Perlなど:一から javascript:少しかじりました html:一通りはできます xml:一から HTTP関係:GET命令などで必要な情報をサーバからクライアントに持ってくるなどの簡単な知識。実際のやり方は一から 足りない部分は必要に応じて覚えていきたいと思っています、まずは簡単なものを一つ作りながら・・・と。どうぞよろしくお願いいたします。

  • Yahoo検索で突然検索されなくなり困っています

    こんにちわ。 初めて質問します。 よろしくお願いします。 ネットショップを運営しており 「A」というキーワードにおいて Yahooで検索するとトップページが40位前後で表示されていたものが 突然まったく検索されなくなってしまいました。 原因、及び対処法等わかるかたがいらっしゃれば 教えていただけないでしょうか。 ちなみにトップページ以外のページが50位前後に2件表示されています。 また「B」というキーワードにおいては1位で表示されています。 「A」のキーワードが重要なので何とか表示されるように なりたいのですが… わかりにくい文章で申し訳ないのですが よろしくお願い致します。

  • APIで取得した情報の「次ページ」

    仕事で最近PHPの勉強をはじめ、将来的にはAPIを活用したサイトを作りたいのですが、次ページの表示の仕方がわかりません。 「次ページへ」 「前ページへ 次ページへ」 と表示したいのですがどのようにすれば、次ページや前ページを表示できるのでしょうか?? APIは価格comの商品検索です。 http://apiblog.kakaku.com/KakakuItemSearchV1.0.html プログラムの内容は、簡単に書きますが +++++++++++++++++++++++++++++++++++ $keyword = $_GET['Keyword']; $url = "​http://api.kakaku.com/Ver1/ItemSearch.asp?Keyword=".$keyword."CategoryGroup=pc&ResultSet=medium&SortOrder=pricerank&PageNum=1"; $a = simplexml_load_file($url) or die("XMLパースエラー"); echo "検索結果".$a->NumOfResult."件"; foreach ($a->Item as $b){ echo "製品名".$b->ProductName ; } +++++++++++++++++++++++++++++++++++ です。 これで最初の5件は表示されるのですが、ここから「次ページ」「前ページ」のリンクを出すにはどのようにするのでしょうか? ご返答よろしくお願いします。

    • 締切済み
    • PHP
  • googleでなぜyahooの検索結果がでるの?

    googleで、「麻生久美子 yahoo」を検索すると、上位に、yahooで「麻生久美子」を検索したページと同じものが表示されます。 通常、リンクなどで公開をしていないページはgoogleでヒットしないと思うのですがなぜ、今回は、yahooの検索結果のページがgoogleで反映されているのでしょうか? http://www.google.co.jp/search?q=%E9%BA%BB%E7%94%9F%E4%B9%85%E7%BE%8E%E5%AD%90+yahoo&hl=ja&ie=UTF-8&c2coff=1 http://search.yahoo.co.jp/bin/search?p=%CB%E3%C0%B8%B5%D7%C8%FE%BB%D2