2012-04-19 12 views
3

バーコードをスキャンし、その書籍の商品ページを小売業者のウェブサイトから表示するiOSおよびAndroidアプリを構築しています。しかし、今、私はそのページからではなく、その製品ページから価格を得たいだけです。小売業者のウェブサイトから価格を取得する

RedLaserが独自のアプリケーションで行うように、ページから製品の価格をどのように引き出すことが可能ですか?

製品ページ:http://goo.gl/rDxAg 価格:ルピー321

私はthisような何かをしたい、それが外部のサーバーを使用せずに、iOSとAndroidの上で実装することができます。

私は初心者ですから、どんな助けも高く評価されます。

+1

APIがあるかどうか尋ねる小売業者に連絡してみましたか? – rlemon

+5

クイック検索では、価格などの製品情報にアクセスするために使用できる(公開)APIがFlipkartにはないことが示されています。あなたは常にデータスクラップに頼ることができます。つまり、製品のページを引っ張って関連情報を見つけることができますが、それは自分自身の[利用規約](http://www.flipkart.com/s/terms)で許可されていません。 。もちろん、あなたがその言葉に逆らって欲しいのなら、それはすべてあなたのものです。 – birryree

+0

いいえ、彼らはAPIを持っていません –

答えて

1

私は電子商取引で働いていますが、時には一部のCSVでサプライヤサイトからデータを取得する必要がある場合、このサイトの一部のサイトでは価格を見つけることができるルーチンを書くことができます:

セレンやPerlで、この例のように
xpath: //div[3]/div[2]/div/div/div/span 

open (INFO, '>>file.csv') or die "$!"; 
my $sel = Test::WWW::Selenium->new(host => "localhost", 
            port => 4444, 
            browser => "*chrome", 
            browser_url => "http://www.example.com/page.htm"); 
$sel->open_ok("/page.htm"); 
$sel->click_ok("//table[2]/tbody/tr/td/a/img"); 
$sel->wait_for_page_to_load_ok("30000"); 
my $price = $sel->get_text("//div[3]/div[2]/div/div/div/span"); 
print INFO ("$price\n"); 
$sel->go_back_ok(); 

# Close file 
close (INFO); 

あなたはグラブのためのデータを同様の機能を使用するか、または

+0

私は例を挙げて助けてくれますか?上記のCSSを使用するにはどうすればいいですか –

+0

ありがとうございます、これはiOSアプリケーションで実装したいので、その方法はわかりません –

1

をウェブスクレイピングのための別のソリューションを使用することができますあなたが使用できる価格を引き出すために、製品ページのURLを入手してくださいNokogiri

まず、ページの内容を取得して価格を取得する必要があります。あなたは鋸山の基本的な例から、CSSやXPathの

によってこれを行うことができます。小売店から提供された場合

require 'nokogiri' 
require 'open-uri' 

doc = Nokogiri::HTML(open('http://www.YOUR_URL_HERE.com')) 
price = doc.at_xpath("//span[@id='fk-mprod-our-id']").text 
+0

例を手伝ってもらえますか? –

+0

私が実際に書いた例は実際に仕事をしていますが、それはルビーであり、このデータをiOSアプリケーションで使用する予定です。なぜあなたはrubyタグを追加しましたか?あなたは、あなたのiOSアプリケーションへの応答を提供するRubyにいくつかのサーバーサイドコードを持っていますか? – Christian

+0

Rubyタグは残念です。どうすればiOSやCSSで実装できるのか教えてください –

1

あなたはAPIを使用することができます。それを検索!
利用可能なAPIがない場合、小売業者のサーバーにページをリクエストし、HTMLをXMLとして解析して価格を含む要素を取得することができます。しかし、小売業者がサイトを変更した場合、それが壊れる可能性があります。また、彼はあなたが彼の価格を使用することを許可するかどうか尋ねる。

6

ウェブサイトの公式APIが利用できない場合は、ダウンロードしたHTMLを解析して必要なデータを取得する必要があります。 iOSとAndroidの両方で利用できるサードパーティ製のHTMLパーサライブラリが多数あります。

iOSの場合、parsing HTML on the iPhoneをチェックしてください。

Androidの場合は、Parse HTML in Androidをご覧ください。

両方のリンクにいくつかのコードサンプルがありますが、これを行う方法を示しています。

希望に役立ちます。

1
<span class="price final-price our fksk-our" id="fk-mprod-our-id"> 
    Rs. 
    <span class="small-font"> </span> 
    315 
</span> 

私はこのHTMLがあなたのPrice tagのためにそこにある気づきました。

jSoupを使用するようおすすめします。 Download from here

このライブラリを使用すると、解析が簡単になりますので、すべて行う必要があります。

Document doc = null; 

    try{ 
     doc = Jsoup.connect("You page URL comes here").get(); // get url contents 
    }catch(IOException e){ 
     // Handle exception here. 
    } 

String priceHtml = doc.select("#fk-mprod-our-id").get(0).html().trim(); // get specific tag 
System.out.println("html fetched: "+priceHtml); //print to check if right tag is selected 
priceHtml = priceHtml.replace("((<span(.)*?>)(.)*(</span>))", ""); // replace inner span using regex. 
System.out.println("My Price tag: "+priceHtml); 

私は上記のコードをテストしていませんが、動作する必要があります。小さな誤差が含まれている可能性があります。少し努力すれば、それを働かせることができます。

Parsingデータに時間がかかることがあります。あなたはバックグラウンドでそれをしなければなりません。バックグラウンド解析が完了したら、UIスレッドにデータを投稿します。

編集:

try catchであなたのconnectコールを囲みます。

jsFiddleデモはこの簡単な紹介の後に提供され、あなたのandroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
+0

未処理の例外タイプIOExceptionを取得しています –

+0

これを確認してくださいhttp://stackoverflow.com/a/4941653/689557 –

+0

編集を確認してください。 –

3

に次の権限を設定していることを確認してください。

現在使用している製品ページには、価格を取得するにはあまりにも多くのデータが含まれています。

書籍のFlipkart.comモバイルウェブサイトを使用する方が読み込みが速いので、より良い方法です。

参考1:http://www.flipkart.com/m/books

あなたのアプリはすでに書籍のPID番号を使用している必要がありますので、あなたがモバイルWebページの検索を照会することができます!あなたの質問リファレンス2

9780224060875pidと本のためにある内のリンク:このページで http://www.flipkart.com/m/search-all?query=9780224060875

あなたが書籍の価格を見ることができるがspClass NameSpan Tagの内側にあります。重要な部分...あなたが待ち望んでいた部分は今、

// Begin section to show random methods to use HTML values 

    // Get the HTML of "Rs. 263" and store it in variable as a string. 
    var priceTextAndLabel = $('#productpage-price').find('span.sp').text(); 

    // Get the HTML of "Rs. 263" and slice off the first 4 characters of "Rs. " leaving "263" only. 
    // Adjust the .slice() if possiable that number is after decimal point. Example: "Rs.1000" 
    var priceText = $('#productpage-price').find('span.sp').text().slice(4); 

    // As above but convert text string of "263" to a number (to allow JavaScript Math if req.). 
    // The value 10 seen below reflects decimal base 10 (vs, octal(8) example) for .parseInt(); 
    var priceNumber = parseInt($('#productpage-price').find('span.sp').text().slice(4),10); 

    // Firefox with Firebug Console will show BLACK characters for "Rs. 263" since it's a "string". 
    console.log(priceTextAndLabel); 

    // Firefox with Firebug Console will show BLACK characters for "263" since it's a "string". 
    console.log(priceText); 

    // Firefox with Firebug Console will show BLUE characters for "263" since it's a "number". 
    console.log(priceNumber); 

// End section to show random method to use HTML values 

OK ..:jQueryのを使用して次に

<!-- Fragment of product price format --> 
<div id="productpage-price"> 
<p> 
    Price: <del> Rs. 350</del> 
    <span class="sp">Rs. 263</span> 
</p> 
</div> 

は、あなたがそうのように必要な価格データを取得することができますそれはあなたの目標(またはWebページ)でflipkart.comの検索URLを使用する方法です。

悲しい答えはできません。彼らはそれを禁じるだけでなく、彼らをブロックする。つまり、ウェブページのiframeやAJAXを使って検索URLを読み込むことはできません。

上記の失敗を説明するために、ブラウザコンソールで見るとAJAX接続が完了しても何も表示されないjsFiddleデモがあります。

参考3:jsFiddle flipkart.com Demo


推奨ソリューション:唯一の本当の選択肢がここにあります。使用できるAPIを備えた本屋を使用してください。このAPIは、特権アクセスのAPIキーを使用すると、正当な店舗代理店になることができます。

おそらく彼らは最終的に提供するAPIを持っています。今、彼らはMP3コレクションのためにMobile App Storeを持っています。 MP3がどのようにAudio Booksを反映できるかを見ると、書籍用モバイルApp Storeを提供する前に時間がかかるかもしれません。

関連する問題