Open 33-Nagata opened 9 years ago
レビュー担当の増子です。
ビデオ通話機能に翻訳機能までついて、素晴らしい! こういう発想でどんどんやりたいことに対して技術で解決していくことで、自分のできることが広がっていくと思うので、すごく良いです!! さて、ソースコードとしては問題ないと思いますが、一点気になったのが、get_translation.phpの中で帰ってきたxmlを文字列として分解しておりますが、「SimpleXML」などを使用したほうがより確実に返却されたテキストを絞り込むことができると思います。
最初はSimpleXMLを使おうとしたのですが、返ってきたXMLに名前空間が設定されており、その処理がわからなかったため、文字列として処理しました。 XMLの扱い方をもう少し勉強してから挑戦してみます。
気づくの遅くなりました。もしかしてもう解決しちゃいましたでしょうか? 名前空間が設定されている場合には、下記URLのように一手間必要となります。 http://liginc.co.jp/programmer/archives/5317
残念ながら、まだ解決していません。 調べてみたら、前回使っていた方法は古いやり方でした。トークンを使用する新しい推奨の方法に変えてみたら、問題なくできました。
ご紹介いただいた情報は私も読んでいて、それを読んでから名前空間なのかと思っていたのですが、もしかしたら違うかもしれません。 返ってきたデータで必要な部分の構造は下記のようになっているのですが、m:propertiesの下にd:Textとm:typeがあり、これをどのように処理したらいいのかわからない状況です。
<feed xmlns:base="https://api.datamarket.azure.com/Data.ashx/Bing/MicrosoftTranslator/v1/Translate" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <entry> <content type="application/xml"> <m:properties> <d:Text m:type="Edm.String">取り出したい情報</d:Text> </m:properties> </content> </entry> </feed>
遅くなってすみません!
この場合、名前空間が「d」と「m」の2つがあります。 まずはcontentの中のmという名前空間のオブジェクトを取り出し、そのオブジェクトからdという名前空間のオブジェクトを取り出すと、欲しい情報が取れました! $xml_strはXMLが入っていると仮定して、、、
$xml = simplexml_load_string($xml_str);
$nameSpaces = $xml->getNamespaces(true);
$prop = $xml->entry->content->children($nameSpaces['m']);
$dNode = $prop->children($nameSpaces['d']);
print_r($dNode->Tex);`
助かりました、ありがとうございます!
ローカルではつながりません。 http://33-nagata.sakura.ne.jp/index.html で稼働中。 SkyWayのAPIキーを書き換えて、他サーバーに上げても大丈夫です。