こんばんは。愉快な仲間です。
今回の記事のタイトルは、露骨に釣りに行きました。
技術的に困っている人が多い内容なので、この記事を読んで解決して貰えたら嬉しいです。
[ad#ad1]
さて、この愉快な仲間のブログではフロントエンドでスクレイピングをめっちゃ使ってます。
自ドメイン内とかHTTPヘッダで弾いていないサーバであれば全然問題ないのですけど、大抵はサーバに負荷を掛けるスクレイピングは嫌われているため弾かれています。
ただ、諦めたらそこで試合終了らしいので、申し訳ないですがクロスドメインでスクレイピングを実装するためxdomainajaxを使ってます。
そう、RO公式ツールの、露店取引情報とかモンスターサーチのことですね。
このxdomainajaxの中で使われているYQLの仕様変更やサーバの状態によって、スクレイピング対象のURLからのレスポンスが残念なことになります。
以前は
html table is no longer supported. See https://policies.yahoo.com/us/en/yahoo/terms/product-atos/yql/index.htm for YQL Terms of Use
なんてメッセージが出て、知識の欠片@修正済の記事で対応方法を説明しました。
そして、先月辺りからまた問題が発生・・・。
今度は
No definition found for Table htmlstring
なんてメッセージを投げてきやがりました。
ということで、これを解決しましたので、ご報告いたします。
・・・書いていて面倒になりました。
これを自分で解決しようと思っている人は、なぜという説明をしなくても直せちゃうと思うので、下記を見てください。
■ 1. envファイルをアップ
こんな感じ。(※2.のxmlを参照するように)
use 'http://share.daiki.beer/sys/htmlstring.xml' as htmlstring;
■ 2. xmlファイルをアップ
こんな感じ。(※コピペでおk)
<?xml version="1.0" encoding="UTF-8" ?> <table xmlns="http://query.yahooapis.com/v1/schema/table.xsd"> <meta> <author>Todd Vierling</author> <description>HTML selector that returns a flat, escaped string rather than a node tree. Suitable for use with Pipes and other applications wishing to embed HTML in another XML-like container.</description> <sampleQuery>select * from {table} where url='http://www.yahoo.com/' and xpath='//a'</sampleQuery> </meta> <bindings> <select itemPath="" produces="XML"> <urls> <url>{url}</url> </urls> <inputs> <key id="url" type="xs:string" paramType="variable" required="true" /> <key id="xpath" type="xs:string" paramType="variable" required="false" /> </inputs> <execute><![CDATA[ var results = y.rest(url).accept('text/html').get().response; if (xpath) results = y.xpath(results, xpath); response.object = results.toXMLString(); ]]></execute> </select> </bindings> </table>
■ 3. jquery.xdomainajax.jsを更新(※1.のenvを参照するように)
// env: 'store://datatables.org/alltableswithkeys', // ↓ env: 'http://share.daiki.beer/sys/yql_table.env',
やったね!たったこれだけで「【知識の欠片】時給計算機」も「【深淵の回廊】金銭効率表@亡国の硬貨」も動くようになったよ!
1ヶ月近く不安定な状態で放置していて申し訳ありませんでした。
また使ってやってください。
ノシ