Webサービスに対してHTTPリクエストを作成し、XMLレスポンスを解析する簡単な例

すべてのKhabrovitesにこんにちは!



トピックは「Hello world」ではありませんが、当面のタスクは非常にシンプルであり、WebサービスからのXML応答を処理する必要がある開発者の時間を節約する手段として、Habrでここに表示されます。 XMLの解析には、PHPでの私にとって普通のDOMparser(もちろんSAXParserも知っています)を使用しました。



Privatbank(ウクライナ)にはAPIがあります。APIはこちらで確認できます 。 それを研究した後、サービスが非常に有益であり、モバイルデバイス上でそれと通信する手段を持つことが便利であることが明らかになります。 このサービスを調べて、現在の為替レートなどの役立つ情報を取得する方法を見てみましょう。 トピックを読んだ後、原則として、他の有用な関数を書くことは難しくありません。







サービスは予測可能な方法で機能します。 リクエストを作成します:



privat24.privatbank.ua/p24/accountorder?oper=prp&PUREXML&apicour&country=en



応答として、次の形式のXML応答を取得します。



<account_order> <support/> <version buildNum="2042" buildDate="Thu Nov 29 10:40:45 EET 2007"/> <logged sessioncount="1073" visitscount="298"/> <locale language="ru"> <date id="20090807T17:21:59" traditional="07.08.2009">07  2009, 17:21:59</date> </locale> <request url_base="https://privat24.privatbank.ua/p24/" url="/accountorder" os="Win" win="Y" ie="N"/> <info> <role id="2"/> <dump exchange="" oper="prp" PUREXML="" apicour="" country="ru" /> </info> <exchangerate> <exchangerate ccy="EUR" ccy_name_ru="" ccy_name_ua="Є " ccy_name_en="Euro" base_ccy="RU" buy="450476" unit="1" date="2009-08-26 00:00:00.0"/> <exchangerate ccy="USD" ccy_name_ru=" " ccy_name_ua=" " ccy_name_en="US Dollar" base_ccy="RU" buy="315437" unit="1" date="2009-08-26 00:00:00.0"/> <exchangerate> </account_order>
      
      







ここでは、 購入属性を持つ為替レートノードに関心があります(サービスはコペックで購入率の値を提供します)。



仕事のために、インターフェイスを想像しやすくしました(TextView +ボタン):







ボタンについては、次のコードを作成しました。



  public void getCurrencyClick(View v){ TextView tv = (TextView) findViewById(R.id.CurrencyTextView); try{ /*  URL   API,             parse */ URL url = new URL("https://privat24.privatbank.ua/p24/accountorder?oper=prp&PUREXML&apicour&country=ua"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(url.openStream())); doc.getDocumentElement().normalize(); /*       ,   ;     ,   ,          nodeList.getLength */ NodeList nodeList = doc.getElementsByTagName("exchangerate"); Node node = nodeList.item(0); //          NamedNodeMap attributes = node.getFirstChild().getAttributes(); //   buy Node currencyAttribEUR = attributes.getNamedItem("buy"); // ...    String currencyValueEUR = currencyAttribEUR.getNodeValue(); //    ,      Node dateCurrency = attributes.getNamedItem("date"); String dateCurrencyStr = dateCurrency.getNodeValue(); //    tv.setText("   "+dateCurrencyStr+":"+currencyValueEUR+ ""); } catch (Exception e) { tv.setText("   "); }; }
      
      







私の意見では-非常に簡単です。 これがテストアプリケーションであり、誰かに役立つことを心から願っています。



ご清聴ありがとうございました;)



All Articles