<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Notes of a Developer &#187; XML</title>
	<atom:link href="http://www.developers-life.com/tag/xml/feed" rel="self" type="application/rss+xml" />
	<link>http://www.developers-life.com</link>
	<description>Develop on Objective-C, UIKit, C, OpenGL for  iPhone, iPad, Mac OS X</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:49:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Integrate High Scores service of mob1serv</title>
		<link>http://www.developers-life.com/integrate-high-scores-service-of-mob1serv.html</link>
		<comments>http://www.developers-life.com/integrate-high-scores-service-of-mob1serv.html#comments</comments>
		<pubDate>Mon, 08 Nov 2010 15:32:14 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mob1serv]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[others]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1143</guid>
		<description><![CDATA[Для начала нужно немного ознакомиться на сайте mob1serv как это работает. Скачать либу с сайта или которую собрал я, немного модифицированную, добавил пару расширений. В мой версии также вложен пример с сайта mob1serv. Начнем&#8230; 1. Нам нужно проверить интернет соединение, лучше всего воспользоваться Reachability, уже готовым решением от разработчиков Apple. На этом моменте останавливаться не [...]]]></description>
			<content:encoded><![CDATA[<p>Для начала нужно немного ознакомиться на сайте <a href="http://www.mob1serv.com/high-scores/" target="blank">mob1serv</a> как это работает.</p>
<p>Скачать либу с <a href="http://mob1serv.com/downloads/library/HighscoresLibPackage.zip" target="blank">сайта</a> или которую <a href="http://depositfiles.com/files/bnmp5giee" target="blank">собрал я</a>, немного модифицированную, добавил пару расширений. В мой версии также вложен <a href="http://mob1serv.com/downloads/sample_projects/HighscoresTestExample.zip" target="blank">пример</a> с сайта mob1serv.</p>
<p>Начнем&#8230;</p>
<p>1. Нам нужно проверить интернет соединение, лучше всего воспользоваться <a href="http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html" target="blank">Reachability</a>, уже готовым решением от разработчиков Apple. На этом моменте останавливаться не будем, в примере все показано.</p>
<p>2. Перед тем как мы будем работать непосредственно с API либы, продемострирую как ее подключить к проекту<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Ion6xx4cJg8?hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Ion6xx4cJg8?hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><span id="more-1143"></span><br />
3. Необходимо зайти на admin.mob1serv.com и создать учетную запись.<br />
- войти и создать новое приложение, нажав на &#8220;+ Add a new Application&#8221;;<br />
- выбрать HighScores -&gt; Edit game modes и обавить mode;<br />
<a href="http://gyazo.com/47b57c8d30195091bdba8a5749eb66cc.png"><img src="http://gyazo.com/47b57c8d30195091bdba8a5749eb66cc.png" alt="" width="294" height="118" /></a><br />
- перейти на вкладку Connection Info и узнать информацию для подключения.<br />
<a href="http://gyazo.com/9eafb8c9c76106b930ad0c292cbc815a.png"><img src="http://gyazo.com/9eafb8c9c76106b930ad0c292cbc815a.png" alt="" width="334" height="204" /></a></p>
<p>4. Вот теперь начнем писать код.</p>
<p>Подпишемся/отпишемся на нотификации</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> subscribe <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>informationGettedNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span>kHighScoresNotificationInformatioGetted object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>successNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span>kMobservNotificationAccessTokenReceived object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>errorNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span>kMobservNotificationAccessTokenReceiveFailed object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>scoreAddedNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span>kHighScoresNotificationScoreAdded object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>scoreGettedNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span> name<span style="color: #002200;">:</span>kHighScoresNotificationScoreGetted object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;subscribed <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> unsubscribe <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span>kHighScoresNotificationInformatioGetted object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span>kMobservNotificationAccessTokenReceived object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span>kMobservNotificationAccessTokenReceiveFailed object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span>kHighScoresNotificationScoreAdded object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> removeObserver<span style="color: #002200;">:</span>self name<span style="color: #002200;">:</span>kHighScoresNotificationScoreGetted object<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;subscribed <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Подключаемся  к серверу</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#define limitScores 25</span><br />
<br />
<span style="color: #6e371a;">#define mAppID 200</span><br />
<span style="color: #6e371a;">#define mGameID 400 // Ваш game id</span><br />
<span style="color: #6e371a;">#define mConsumerKey @&quot;sdfsadfjoisdf&quot;</span><br />
<span style="color: #6e371a;">#define mSecretKey @&quot;sdfsadfjoisdf&quot;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> connect <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;HighScoresService<span style="color: #002200;">*</span> hScore <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>HighScoresService sharedInstance<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;hScore.appid <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span>mAppID<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>hScore setConsumerKey<span style="color: #002200;">:</span>mConsumerKey andSecret<span style="color: #002200;">:</span>mSecretKey<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>hScore getAccessToken<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>В случае успешного подключений приходит сообщение и сразу делаем запрос на обновление результатов</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>successNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>self refreshResults<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>refreshResults <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>scores removeAllObjects<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// array</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#40;</span>HighScoresService<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>HighScoresService sharedInstance<span style="color: #002200;">&#93;</span> getScoresForGame<span style="color: #002200;">:</span>mGameID scoreLimit<span style="color: #002200;">:</span>limitScores<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Получаем информацию про запрашиваемые скоры  и сами скоры</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>informationGettedNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// так я сохраняю информацию о запросе</span><br />
&nbsp; &nbsp; &nbsp;self.dictInfo <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>notification.userInfo objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;info&quot;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// получаю количество записей всего</span><br />
&nbsp; &nbsp; &nbsp;totalCount <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self.dictInfo objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;total_count&quot;</span><span style="color: #002200;">&#93;</span> intValue<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// получаем скоры</span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>scoreGettedNotificationReceived<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #11740a; font-style: italic;">// get scores and insert ot array</span><br />
&nbsp; &nbsp; &nbsp;<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a><span style="color: #002200;">*</span> dict <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>notification.userInfo objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;result&quot;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;scores <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> alloc<span style="color: #002200;">&#93;</span> initWithArray<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>dict objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;scores&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;...<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Пример добавления записи в онлайн скоры</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">HighScore<span style="color: #002200;">*</span> score <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>HighScore alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
score.index <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;<br />
score.limit <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span>limitScores<span style="color: #002200;">&#93;</span>;<br />
score.userName <span style="color: #002200;">=</span> name;<br />
score.value <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span>score<span style="color: #002200;">&#93;</span>;<br />
score.subgameId <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%d&quot;</span>,mGameID<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>HighScoresService sharedInstance<span style="color: #002200;">&#93;</span> addScore<span style="color: #002200;">:</span>score<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>В scoreAddedNotificationReceived:(NSNotification*)notification получим калбек с результатом добавления</p>
<p>Вот к примеру как можно получить следующие 25 результатов</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>loadMore25Scores <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>totalCount <span style="color: #002200;">!=</span> loadedScores<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>HighScoresService sharedInstance<span style="color: #002200;">&#93;</span> getScoresForGame<span style="color: #002200;">:</span>idGame <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;scoreLimit<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>totalCount<span style="color: #002200;">-</span>limitScores &gt;<span style="color: #002200;">=</span> limitScores<span style="color: #002200;">&#41;</span>? limitScores <span style="color: #002200;">:</span> totalCount<span style="color: #002200;">-</span>loadedScores <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fromIndex<span style="color: #002200;">:</span>loadedScores <span style="color: #002200;">&#93;</span>; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loadedScores <span style="color: #002200;">+=</span> <span style="color: #002200;">&#40;</span>totalCount<span style="color: #002200;">-</span>limitScores &gt;<span style="color: #002200;">=</span> limitScores<span style="color: #002200;">&#41;</span>? limitScores <span style="color: #002200;">:</span> totalCount<span style="color: #002200;">-</span>loadedScores;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span><br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/integrate-high-scores-service-of-mob1serv.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple XML Parser based on NSXMLParser +converter</title>
		<link>http://www.developers-life.com/simple-xml-parser-based-on-nsxmlparser-converter.html</link>
		<comments>http://www.developers-life.com/simple-xml-parser-based-on-nsxmlparser-converter.html#comments</comments>
		<pubDate>Wed, 21 Apr 2010 11:45:16 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=944</guid>
		<description><![CDATA[Simple XML Parser based on NSXMLParser +converter to XML file How To Setup: insert next code to file &#8220;name of you project&#8221;_Prefix.pch 123&#160; &#160; &#160;#import &#34;XMLNode.h&#34; &#160; &#160; &#160;#import &#34;XMLParser.h&#34; &#160; &#160; &#160;#import &#34;XMLConvert.h&#34; Create and launching XMLParser. You will get parsed data ( with XMLNode data type ) in callbackParser: method 12345678&#160; &#160; &#160;NSURL [...]]]></description>
			<content:encoded><![CDATA[<p>Simple XML Parser based on NSXMLParser +converter to XML file</p>
<p>How To Setup:<br />
insert next code to file &#8220;name of you project&#8221;_Prefix.pch</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp;<span style="color: #6e371a;">#import &quot;XMLNode.h&quot;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #6e371a;">#import &quot;XMLParser.h&quot;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #6e371a;">#import &quot;XMLConvert.h&quot;</span></div></td></tr></tbody></table></div>
<p>Create and launching XMLParser.<br />
You will get parsed data ( with XMLNode data type ) in <em>callbackParser:</em> method</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp;<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> <span style="color: #002200;">*</span>URLToFile <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> fileURLWithPath<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> <br />
&nbsp; &nbsp; pathForResource<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;source&quot;</span> <br />
&nbsp; &nbsp; &nbsp;ofType<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;xml&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;XMLParser <span style="color: #002200;">*</span>parser <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>XMLParser alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>parser setDelegate<span style="color: #002200;">:</span>self withAction<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>callbackParser<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>parser parseXMLFile<span style="color: #002200;">:</span>URLToFile<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span>parser release<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>Converting results of parsing to XML file:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>content <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>XMLConvert convertXMLNode<span style="color: #002200;">:</span>root<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>And additional define methods for working with XMLNode&#8217;s:<br />
<em>XMLaddAttribute(node, object, key), XMLgetAttribute(node, key), XMLsetParent(node, parent), XMLaddChild(parent, child), XMLgetChild(parent, child), XMLremoveChild(parent, child), XMLgetChildWithAttribute(parent, childname, object, key)</em></p>
<p><a href="http://www.developers-life.com/wp-content/plugins/download_counter/redirect.php?id=9" target="_blank"><img src="http://www.developers-life.com/wp-content/plugins/download_counter/redirect.php?pid=9" border="0" alt="" height="0" width="0" />Source</a><br />
Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/simple-xml-parser-based-on-nsxmlparser-converter.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Android SDK first steps</title>
		<link>http://www.developers-life.com/google-android-sdk-first-steps.html</link>
		<comments>http://www.developers-life.com/google-android-sdk-first-steps.html#comments</comments>
		<pubDate>Tue, 03 Nov 2009 00:10:47 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Кодинг]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=625</guid>
		<description><![CDATA[Долгое время я посматривал на Google Android OS и хотел посмотреть, что это такое и вот решился :-). Поставить было довольно просто! Скачал Eclipse Galileo и Android SDK (само sdk было пустое, нужно было по инструкции поставить его), распоковал и поставил по инструкции все как и пологается. Вот! Структура файлов: Сначала начал тыкаться, мыкать, что [...]]]></description>
			<content:encoded><![CDATA[<p>Долгое время я посматривал на Google Android OS и хотел посмотреть, что это такое и вот решился :-). Поставить было довольно просто! Скачал Eclipse Galileo и Android SDK (само sdk было пустое, нужно было по инструкции поставить его), распоковал и поставил по инструкции все как и пологается. Вот!</p>
<p>Структура файлов:</p>
<p><img class="alignnone size-full wp-image-626" title="Screen shot 2009-11-03 at 1.03.04 AM" src="http://www.developers-life.com/wp-content/uploads/2009/11/Screen-shot-2009-11-03-at-1.03.04-AM.png" alt="Screen shot 2009-11-03 at 1.03.04 AM" width="203" height="330" /></p>
<p>Сначала начал тыкаться, мыкать, что куда и как, нашел где находится основной код:<br />
<strong> /src/__package_name__/__project_name__.java</strong></p>
<p>Обнаружил что-то типа интерфейс билдера, далее как IB (что-то типа, потому-что c apple реализацией IB тяжело ему тягаться)<br />
<strong>/res/layout/main.xml</strong> &#8211; его можно править как вручную так и немного автоматизированным путем:<br />
<img class="alignnone size-large wp-image-629" title="Screen shot 2009-11-03 at 1.23.44 AM" src="http://www.developers-life.com/wp-content/uploads/2009/11/Screen-shot-2009-11-03-at-1.23.44-AM-1024x571.jpg" alt="Screen shot 2009-11-03 at 1.23.44 AM" width="484" height="270" /></p>
<p>На картинке и так видно что к чему, но по мелочам распишу: <span id="more-625"></span><br />
1. Дерево фалов которое я привел выше<br />
2.  Сам толком еще не разобрал, но название говорит само за себя &#8211; layouts (слои). На 7 мы видим, что там главный слой LinearLayouts. Думаю, что слои для манипуляций с отображеием объектов, но с этим мы еще разберемся в будущем.<br />
3. Список объектов, тут все просто.<br />
4. Отображается полученный интерфейс при моделировании.<br />
<span style="background-color: #ffffff;">5. Переключатель между видами моделирования, сейчас выбран &#8220;Layout&#8221; а ниже приведен пример main.xml<br />
<img class="alignnone size-full wp-image-630" title="Screen shot 2009-11-03 at 1.43.13 AM" src="http://www.developers-life.com/wp-content/uploads/2009/11/Screen-shot-2009-11-03-at-1.43.13-AM.png" alt="Screen shot 2009-11-03 at 1.43.13 AM" width="338" height="246" /><br />
6. На картинке выбран элемент TextView и в этом окошке 6 отображаются его параметры, которые можно менять  и их довольно таки много!<br />
7. Список объектов. Тут все просто.<br />
</span></p>
<p><span style="background-color: #ffffff;">Немного просмотрев доки нашел как обратиться к кнопке:<br />
В <strong>/src/__package_name__/__project_name__.java </strong>добавим  <strong>import android.widget.Button;</strong></span></p>
<p>после:</p>
<div class="codecolorer-container java geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;setContentView<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">main</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>вставим код:</p>
<div class="codecolorer-container java geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a> button <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abutton+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Button</span></a><span style="color: #009900;">&#41;</span>findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">Button01</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>обратите внимание на скриншо чуть выше, там есть кнопка с этим id<br />
и посавим текст:</p>
<div class="codecolorer-container java geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;button.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">string</span>.<span style="color: #006633;">hello</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Незнаю плюс это или минус, но есть хранилище констант (Android Resources)! Думаю всеже это пл<span style="background-color: #ffffff;">юс. В <strong>/res/values/strings.xml </strong>хранятся константы, к примеру текст который в TextView взят из этого хранилища и указан в IB через название константы.</span></p>
<p><img class="alignnone size-medium wp-image-631" title="Screen shot 2009-11-03 at 1.51.57 AM" src="http://www.developers-life.com/wp-content/uploads/2009/11/Screen-shot-2009-11-03-at-1.51.57-AM-300x109.png" alt="Screen shot 2009-11-03 at 1.51.57 AM" width="300" height="109" /><br />
К примеру из кода к этим данным можно обратиться таким образом: <strong>R.string.hello</strong></p>
<p>Наш следующий и заключительный на сегодня файл это: <strong>/gen/__package_name__/R.java<br />
<span style="font-weight: normal;">Как написано в самом файле: &#8220; This class was automatically generated by the aapt tool from the resource data it found.  It should not be modified by hand.&#8221; Другими словами автомаически генераруется спомощью толзы, когда мы редактируем ресурсы и объекты в IB. Благодаря этому коду мы можем работать с объектами в ресурс файле описанном выше. </span></strong></p>
<p>Вот еще немного информации:<br />
<span style="color: #99cc00;"> src/</span><br />
Includes your stub Activity Java file. All other Java files for your application go here.<br />
<span style="background-color: #ffffff;"><em> </em></span></p>
<p><span style="background-color: #ffffff;"><em><span style="color: #99cc00;">&lt;Android Version&gt;</span></em><span style="color: #99cc00;">/ (e.g., Android 1.1/)</span><br />
Includes the android.jar file that your application will build against. This is determined by the build target that you have chosen in the New Project Wizard.</span></p>
<p><span style="background-color: #ffffff;"><span style="color: #99cc00;">gen/</span><br />
This contains the Java files generated by ADT, such as your R.java file and interfaces created from AIDL files.</span></p>
<p><span style="background-color: #ffffff;"><span style="color: #99cc00;">assets/</span><br />
This is empty. You can use it to store raw asset files. See Resources and Assets.</span></p>
<p><span style="background-color: #ffffff;"><span style="color: #99cc00;">res/</span><br />
A folder for your application resources, such as drawable files, layout files, string values, etc. See Resources and Assets.</span></p>
<p><span style="color: #99cc00;"> AndroidManifest.xml</span><br />
The Android Manifest for your project. See The AndroidManifest.xml File.<br />
<span style="color: #99cc00;"> default.properties</span><br />
This file contains project settings, such as the build target. This files is integral to the project, as such, it should be maintained in a Source Revision Control system. It should never be edited manually — to edit project properties, right-click the project folder and select &#8220;Properties&#8221;.</p>
<p><strong> </strong></p>
<p><strong>Вывод: Android SDK меня заинтересовала, вполне гибко все сделано, если попотеть, то можно даже написать свой какой-то мега удобный интерфейс билдер, потипу как у apple, но это преспектива. Пока еще не изучил основные функции, ивенты и прочее, но конструкция R. мне уже чем-то нравится! Можно обратиться к объекту из любого места! Теперь паттерн singleton буду реже использовать. Вцелом будем двигать эту тему!</strong></p>
<p><strong><span style="font-weight: normal;">Спасибо за внимание! Буду рад вопросам и замечаниям!</span></strong></p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/google-android-sdk-first-steps.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Курс валют на iPhone (parse XML Files)</title>
		<link>http://www.developers-life.com/exchange-rates-in-iphone.html</link>
		<comments>http://www.developers-life.com/exchange-rates-in-iphone.html#comments</comments>
		<pubDate>Sat, 03 Jan 2009 01:32:51 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=277</guid>
		<description><![CDATA[Ура! Выделил время и написал нужный мне апп для iPhone. Долго собирался, а делов то! В целом, за вечер написал. Естественно прост и без наваротов. Курс валют Украины :) Но если захотите, то прочтете эту статью и сами сделаете :) Если лень, можно скачать Exchange rates on iPhone Вот что у меня получилось: Приведу примеры [...]]]></description>
			<content:encoded><![CDATA[<p>Ура! Выделил время и написал нужный мне апп для iPhone. Долго собирался, а делов то! В целом, за вечер написал. Естественно прост и без наваротов. Курс валют Украины :) Но если захотите, то прочтете эту статью и сами сделаете :) Если лень, можно скачать <a href="http://www.developers-life.com/wp-content/plugins/download_counter/redirect.php?id=1" target="_blank"><img src="http://www.developers-life.com/wp-content/plugins/download_counter/redirect.php?pid=1" border="0" alt="Exchange rates on iPhone Курс валют украины в iPhone" />Exchange rates on iPhone</a></p>
<p>Вот что у меня получилось:<br />
<a href="http://www.developers-life.com/wp-content/uploads/2009/01/img_0003.png"><img class="aligncenter size-medium wp-image-280" title="Example" src="http://www.developers-life.com/wp-content/uploads/2009/01/img_0003-200x300.png" alt="" width="200" height="300" /></a></p>
<p>Приведу примеры кода.<br />
В парсинге мне помогла официальная книга от apple. Если интересно, то можно почитать про это на странице 311 в книге &#8220;The iPhone Developer`s Cookbook&#8221;.</p>
<p>Далее код и скомпилированная версия&#8230;<br />
<span id="more-277"></span><br />
Класс для хранения информации:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class TreeNode;<br />
<br />
<span style="color: #a61390;">@interface</span> TreeNode <span style="color: #002200;">:</span> <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/"><span style="color: #400080;">NSObject</span></a><br />
<span style="color: #002200;">&#123;</span><br />
TreeNode &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>parent;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> &nbsp;<span style="color: #002200;">*</span>children;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>key;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>leafvalue;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> <span style="color: #002200;">*</span>dattributes;<br />
<br />
<span style="color: #002200;">&#125;</span><br />
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> &nbsp; &nbsp; TreeNode &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>parent;<br />
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> &nbsp;<span style="color: #002200;">*</span>children;<br />
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>key;<br />
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">*</span>leafvalue;<br />
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> &nbsp; &nbsp;<span style="color: #002200;">*</span>dattributes;<br />
<br />
<span style="color: #a61390;">@end</span><br />
<br />
<span style="color: #a61390;">@implementation</span> TreeNode<br />
<span style="color: #a61390;">@synthesize</span> parent<br />
, &nbsp; &nbsp;children<br />
, &nbsp; &nbsp;key<br />
, &nbsp; &nbsp;leafvalue<br />
, &nbsp; &nbsp;dattributes;<br />
<span style="color: #a61390;">@end</span></div></td></tr></tbody></table></div>
<p>Далее сам код который парсит и сохраняет данные в объект root:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>parseXMLFileAtFile <span style="color: #002200;">&#123;</span><br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> <span style="color: #002200;">*</span>xmlURL <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> URLWithString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;http://bank-ua.com/export/currrate.xml&quot;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>self parseXMLFile<span style="color: #002200;">:</span>xmlURL<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// Use just one parser instance at any time</span><br />
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> sharedInstance<br />
<span style="color: #002200;">&#123;</span><br />
<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span>sharedInstance<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
sharedInstance <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<span style="color: #a61390;">return</span> sharedInstance;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// Public parser returns the tree root</span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>TreeNode <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parseXMLFile<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> url<br />
<span style="color: #002200;">&#123;</span><br />
stack <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
<br />
root <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>TreeNode alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
root.parent <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;<br />
root.leafvalue <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;<br />
root.children <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
root.dattributes <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>stack addObject<span style="color: #002200;">:</span>root<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>root release<span style="color: #002200;">&#93;</span>;<br />
<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> <span style="color: #002200;">*</span>parser <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> alloc<span style="color: #002200;">&#93;</span> initWithContentsOfURL<span style="color: #002200;">:</span>url<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>parser setDelegate<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>parser parse<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#91;</span>parser release<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// pop down to real root</span><br />
<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>root children<span style="color: #002200;">&#93;</span> lastObject<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// Descend to a new element</span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>parser<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parser<br />
didStartElement<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>elementName<br />
namespaceURI<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>namespaceURI<br />
qualifiedName<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>qName<br />
attributes<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>attributeDict<br />
<span style="color: #002200;">&#123;</span><br />
<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>qName<span style="color: #002200;">&#41;</span> elementName <span style="color: #002200;">=</span> qName;<br />
<br />
currentElement <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>elementName copy<span style="color: #002200;">&#93;</span>;<br />
<br />
TreeNode <span style="color: #002200;">*</span>leaf <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>TreeNode alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
<br />
leaf.parent <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>stack lastObject<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>stack lastObject<span style="color: #002200;">&#93;</span> children<span style="color: #002200;">&#93;</span> addObject<span style="color: #002200;">:</span>leaf<span style="color: #002200;">&#93;</span>;<br />
leaf.key <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> stringWithString<span style="color: #002200;">:</span>elementName<span style="color: #002200;">&#93;</span>;<br />
leaf.leafvalue <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;<br />
leaf.children <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/"><span style="color: #400080;">NSMutableArray</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
leaf.dattributes <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> alloc<span style="color: #002200;">&#93;</span> initWithDictionary<span style="color: #002200;">:</span>attributeDict copyItems<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#91;</span>stack addObject<span style="color: #002200;">:</span>leaf<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #002200;">&#91;</span>leaf release<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<span style="color: #11740a; font-style: italic;">// Pop after finishing element</span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>parser<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parser<br />
didEndElement<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>elementName<br />
namespaceURI<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>namespaceURI<br />
qualifiedName<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>qName<br />
<span style="color: #002200;">&#123;</span><br />
<span style="color: #002200;">&#91;</span>stack removeLastObject<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #11740a; font-style: italic;">// Reached a leaf</span><br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>parser<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/"><span style="color: #400080;">NSXMLParser</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parser foundCharacters<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #a61390;">string</span><br />
<span style="color: #002200;">&#123;</span><br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>stack lastObject<span style="color: #002200;">&#93;</span> setLeafvalue<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> stringWithString<span style="color: #002200;">:</span><span style="color: #a61390;">string</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Ну а дальше на ваше усмотрение как это отбразить. Я предпочел временно в UITableView.</p>
<p>Для запуска вам возможно понадобиться зайти по ssh на свой телефон и прописать:<br />
sysctl -w security.mac.proc_enforce=0 security.mac.vnode_enforce=0</p>
<p>Все в ваших руках :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/exchange-rates-in-iphone.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Баланс на Webmoney? Спросим у PHP!</title>
		<link>http://www.developers-life.com/balance-at-the-purse-webmoney-with-php.html</link>
		<comments>http://www.developers-life.com/balance-at-the-purse-webmoney-with-php.html#comments</comments>
		<pubDate>Wed, 17 Sep 2008 22:15:50 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Money]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webmoney]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=166</guid>
		<description><![CDATA[С помощью описанного ниже интерфейса вы можете получать информацию о текущих остатках на кошельках вашего WMID. Полное описание интерфейса находится здесь. Интерфейс требует включения путем обращения в службу поддержку WMID 941977853154. X9 особенно полезен для автоматических обменных пунктов, сайтов, выплачивающих &#8220;WM-бонусы&#8221; и других проектов, в которых посетитель должен видеть текущие денежные резервы сервиса. Наш XML-запрос [...]]]></description>
			<content:encoded><![CDATA[<p>    С помощью описанного ниже интерфейса вы можете получать информацию о текущих остатках на кошельках вашего WMID. Полное описание интерфейса находится <a href="http://webmoney.ru/rus/developers/interfaces/xml/balance/index.shtml">здесь</a>. Интерфейс требует включения путем обращения в службу поддержку WMID 941977853154.</p>
<p>   X9 особенно полезен для автоматических обменных пунктов, сайтов, выплачивающих &#8220;WM-бонусы&#8221; и других проектов, в которых посетитель должен видеть текущие денежные резервы сервиса.<br />
<span id="more-166"></span><br />
Наш XML-запрос должен выглядеть так:<br />
&lt;w3s.request&gt;<br />
     &lt;reqn&gt;&lt;/reqn&gt;<br />
     &lt;wmid&gt;&lt;/wmid&gt;<br />
     &lt;sign&gt;&lt;/sign&gt;<br />
     &lt;getpurses&gt;<br />
          &lt;wmid&gt;&lt;/wmid&gt;<br />
     &lt;/getpurses&gt;<br />
&lt;/w3s.request&gt;</p>
<p> Что означают параметры:<br />
reqn &#8211; номер запроса, всякий раз должен быть больше предыдущего (в рамках данного отдельно взятого интерфейса);<br />
wmid &#8211; ваш WMID, которым подписывается запрос;<br />
sign &#8211; подпись запроса, сформированная из параметров: getpurses\wmid+reqn;<br />
getpurses\wmid &#8211; WMID, по кошелькам которого необходимо проверить балансы. Дело в том, что данный интерфейс поддерживает доверенности, т.е. вы можете проверить балансы на кошельках чужого WMID, если владелец этого WMID дал вам соответствующую доверенность на сайте security.webmoney.ru. Запрос в этом случае вы всё равно должны подписывать своим WMID, но в поле getpurses\wmid записать WMID проверяемый. В приведенном ниже примере функции мы будем проверять балансы на собственном WMID. Если же вы захотите проверить балансы по доверенности, вам нужно будет немного видоизменить функцию. </p>
<p>Формат ответа сервера WebMoney следующий:<br />
&lt;w3s.response&gt;<br />
    &lt;reqn&gt;&lt;/reqn&gt;<br />
    &lt;retval&gt;&lt;/retval&gt;<br />
    &lt;retdesc&gt;&lt;/retdesc&gt;<br />
    &lt;purses cnt=&#8221;n&#8221;&gt;<br />
    &lt;purse id=&#8221;n&#8221;&gt;<br />
    &lt;pursename&gt;&lt;/pursename&gt;<br />
     &lt;amount&gt;&lt;/amount&gt;<br />
   &lt;/purse&gt;<br />
   &lt;purse&gt;<br />
   &#8230;<br />
   &lt;/purse&gt;<br />
   &lt;/purses&gt;<br />
&lt;/w3s.response&gt;</p>
<p>Что нас интересует в ответе? Во-первых, поле &lt;retval&gt; (если оно равно 0, то балансы получены успешно, в противном случае retval будет содержать код ошибки, расшифровку которой нужно смотреть в поле &lt;retdesc&gt;). Во-вторых, поля &lt;pursename&gt; и &lt;amount&gt;, содержащие соответственно номера кошельков и их балансы.<br />
Как вы уже поняли, запросить остаток по одному конкретному кошельку, к сожалению, нельзя. Ответ возвращает балансы сразу всех кошельков.</p>
<p>Приведем теперь полностью функцию, которая реализует работу с интерфейсом X9, и добавим её в wmxml.inc.php:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// ИНТЕРФЕЙС X9. ПОЛУЧЕНИЕ БАЛАНСА</span><br />
<span style="color: #666666; font-style: italic;">// На выходе: массив ['retval'=&gt;код выполнения, 'retdesc'=&gt;описание результата,</span><br />
<span style="color: #666666; font-style: italic;">// 'purses'=&gt;массив балансов]</span><br />
<span style="color: #000000; font-weight: bold;">function</span> _WMXML9 <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$Global_WMID</span><span style="color: #339933;">,</span> <span style="color: #000088;">$XML_addr</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$reqn</span><span style="color: #339933;">=</span>_GetReqn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$rsign</span><span style="color: #339933;">=</span>_GetSign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Global_WMID</span><span style="color: #339933;">.</span><span style="color: #000088;">$reqn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$xml</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<br />
&lt;w3s.request&gt;<br />
&nbsp;&lt;reqn&gt;<span style="color: #006699; font-weight: bold;">$reqn</span>&lt;/reqn&gt;<br />
&nbsp;&lt;wmid&gt;<span style="color: #006699; font-weight: bold;">$Global_WMID</span>&lt;/wmid&gt;<br />
&nbsp;&lt;sign&gt;<span style="color: #006699; font-weight: bold;">$rsign</span>&lt;/sign&gt;<br />
&nbsp;&lt;getpurses&gt;<br />
&nbsp; &lt;wmid&gt;<span style="color: #006699; font-weight: bold;">$Global_WMID</span>&lt;/wmid&gt;<br />
&nbsp;&lt;/getpurses&gt;<br />
&lt;/w3s.request&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$resxml</span><span style="color: #339933;">=</span>_GetAnswer<span style="color: #009900;">&#40;</span><span style="color: #000088;">$XML_addr</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// echo $resxml;</span><br />
<span style="color: #000088;">$xmlres</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/simplexml_load_string"><span style="color: #990000;">simplexml_load_string</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resxml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$xmlres</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1000</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retdesc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Не получен XML-ответ&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">retval</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retdesc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><a href="http://www.php.net/iconv"><span style="color: #990000;">iconv</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;CP1251&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">retdesc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!==</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp;<span style="color: #666666; font-style: italic;">// Формируем массив [номер кошелька] = баланс</span><br />
&nbsp;<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">purses</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">purse</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$purse</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000088;">$pursename</span><span style="color: #339933;">=</span><a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$purse</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pursename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$amount</span><span style="color: #339933;">=</span><a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$purse</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">amount</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'purses'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$pursename</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000088;">$amount</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Разберём, что происходит в этой функции.<br />
Функция не получает никаких входных параметров.<br />
Генерируем уникальный номер запроса $reqn с помощью функции _GetReqn():</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$reqn</span><span style="color: #339933;">=</span>_GetReqn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Получаем подпись XML-пакета с помощью функции _GetSign(). На вход функции подаём строку, полученную в результате склейки параметров, как это предусмотрено в описании интерфейса. Параметры должны склеиваться именно в таком порядке, как это указано ниже.</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$rsign</span><span style="color: #339933;">=</span>_GetSign<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Global_WMID</span><span style="color: #339933;">.</span><span style="color: #000088;">$reqn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//Наконец, формируем XML-пакет с запросом:</span><br />
<span style="color: #000088;">$xml</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<br />
&lt;w3s.request&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;reqn&gt;<span style="color: #006699; font-weight: bold;">$reqn</span>&lt;/reqn&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;wmid&gt;<span style="color: #006699; font-weight: bold;">$Global_WMID</span>&lt;/wmid&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;sign&gt;<span style="color: #006699; font-weight: bold;">$rsign</span>&lt;/sign&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;getpurses&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;wmid&gt;<span style="color: #006699; font-weight: bold;">$Global_WMID</span>&lt;/wmid&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;/getpurses&gt;<br />
&lt;/w3s.request&gt;&quot;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Отправляем запрос на сервер WebMoney и получаем от него ответ с помощью функции _GetAnswer(). На вход функции подаём URL интерфейса X9 из глобального массива $XML_addr, а также пакет XML-запроса, сформированный только что:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$resxml</span><span style="color: #339933;">=</span>_GetAnswer<span style="color: #009900;">&#40;</span><span style="color: #000088;">$XML_addr</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Для отладки и поиска ошибок может потребоваться прочитать XML-ответ &#8220;в чистом виде&#8221;. Тогда просто раскомментируйте следующую строку:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// echo $resxml;</span></div></td></tr></tbody></table></div>
<p>Вызовом функции simplexml_load_string() из библиотеки SimpleXML создаём на основе XML-ответа, полученного от WebMoney, объект. Параметры XML-ответа становятся свойствами объекта, и мы сможем легко получать к ним доступ.</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$xmlres</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/simplexml_load_string"><span style="color: #990000;">simplexml_load_string</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resxml</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Если $xmlres не создан, значит, мы по какой-то причине не получили ответ от WebMoney. Тогда прерываем работу функции:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$xmlres</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp;<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1000</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retdesc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Не получен XML-ответ&quot;</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Читаем следующие свойства объекта: retval (содержит результат выполнения запроса; если балансы успешно получены, то retval равен 0), retdesc (содержит расшифровку результата). Сохраняем эти переменные в массив $result.</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">retval</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retdesc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><a href="http://www.php.net/iconv"><span style="color: #990000;">iconv</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;CP1251&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">retdesc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Обратите внимание, что содержимое поля <retdesc> мы перекодировали из UTF-8 в Win1251. Дело в том, что XML-ответ от WebMoney приходит в кодировке Windows1251, но SimpleXML при помещении XML-данных в объект принудительно превратил их в Юникод. Такая вот у него особенность. А так как <retdesc> &#8211; это строка, и теоретически она может содержать русские символы, то при выемке её из объекта мы возвращаем ей &#8220;родную&#8221; кодировку. Хотя, в общем, это не обязательно и зависит от ваших нужд и задач.</p>
<p>Если retval равен 0, то можно перейти к сохранению балансов по кошелькам. Номера кошельков и их балансы содержатся внутри одинаковых блоков XML-ответа
<purse>&#8230;</purse> в
<pursename> и <amount> соответственно. Пробегаем эти блоки в цикле и формируем ассоциативный массив, где ключами элементов делаем номера кошельков, а значениями элементов делаем соответствующие этим кошелькам балансы. Сформированный массив сохраняем внутрь элемента purses выходного массива $result:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">!==</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// Формируем массив [номер кошелька] = баланс</span><br />
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$xmlres</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">purses</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">purse</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$purse</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp;<span style="color: #000088;">$pursename</span><span style="color: #339933;">=</span><a href="http://www.php.net/strval"><span style="color: #990000;">strval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$purse</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pursename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #000088;">$amount</span><span style="color: #339933;">=</span><a href="http://www.php.net/floatval"><span style="color: #990000;">floatval</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$purse</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">amount</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp;<span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'purses'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$pursename</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #000088;">$amount</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>На выходе функция _WMXML9() возвращает массив $result:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Чтобы было лучше понятно, ещё раз посмотрим на содержимое массива $result (его можно привести в читабельный вид с помощью функции print_r(), например):</p>
<p>Array (<br />
 [retval] => код_выполнения<br />
 [retdesc] => описание_результата<br />
 [purses] => Array (<br />
               [номер_кошелька] => баланс<br />
               [номер_кошелька] => баланс<br />
               [номер_кошелька] => баланс<br />
               &#8230;<br />
             )<br />
)</p>
<p>Теперь осталось только проверить, как работает то, что мы написали. Создадим скрипт для тестов test.php:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">// test.php - скрипт для тестирования</span><br />
<span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;wmxml.inc.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$r</span><span style="color: #339933;">=</span>_WMXML9<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Результат (0 - успешно) - &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$r</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retval'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Расшифровка - &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$r</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'retdesc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/list"><span style="color: #990000;">list</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">=</span><a href="http://www.php.net/each"><span style="color: #990000;">each</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$r</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'purses'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;* На кошельке &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$val</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; WM&lt;br&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/balance-at-the-purse-webmoney-with-php.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Как создать динамический XML-файл Google Sitemap?</title>
		<link>http://www.developers-life.com/how-to-create-a-dynamic-xml-file-google-sitemap.html</link>
		<comments>http://www.developers-life.com/how-to-create-a-dynamic-xml-file-google-sitemap.html#comments</comments>
		<pubDate>Fri, 12 Sep 2008 10:00:12 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Sitemap]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=137</guid>
		<description><![CDATA[Если Ваш сайт состоит из 1000 страниц и более, то создавать Google Sitemap вручную будет слишком долго, муторно и неудобно. К счастью, Google предоставляет собственный скрипт, называемый Sitemap Generator, позволяющий очень быстро сгенерировать необходимый файл. Этот скрипт написан на языке Python, он создаёт Sitemap для Вашего сайта, используя Sitemap Protocol. Этот скрипт может создавать Sitemaps [...]]]></description>
			<content:encoded><![CDATA[<p>Если Ваш сайт состоит из 1000 страниц и более, то создавать Google Sitemap вручную будет слишком долго, муторно и неудобно.</p>
<p>К счастью, Google предоставляет собственный скрипт, называемый <a title="Google Sitemap Generator" href="https://www.google.com/webmasters/tools/docs/en/sitemap-generator.html" target="_blank">Sitemap Generator</a>, позволяющий очень быстро сгенерировать необходимый файл. Этот скрипт написан на языке Python, он создаёт Sitemap для Вашего сайта, используя <strong>Sitemap Protocol</strong>. Этот скрипт может создавать Sitemaps из списка <acronym title="Uniform Resource Locator">URL</acronym>, директорий веб-сервера или из логов доступа.</p>
<p><span id="more-137"></span></p>
<p><strong>Узнать больше информации относительно инструментов, предоставляемых Google’ом для веб-мастеров Вы можете тут:</strong> <a href="https://www.google.com/webmasters/sitemaps/login" target="_blank">https://www.google.com/webmasters/sitemaps/login</a></p>
<h4>Инструменты для генерации файла Google Sitemap от сторонних производителей</h4>
<p>Google также предоставляет информацию о других sitemap-генераторах.</p>
<p>Например я использую бесплатный sitemap-генератор. Он лёгок в применении, и он быстро генерирует необходимый <acronym title="eXtensible Markup Language">XML</acronym>-код для сайта.</p>
<h4><strong>Ниже я привожу пошаговый план создания Google Sitemap при помощи одного из множества бесплатных Sitemap-генераторов:</strong></h4>
<ol>
<li>Зайдите на сайт <a title="Sitemap Generator" href="http://www.sitemapspal.com/" target="_blank">http://www.sitemapspal.com</a> и введите адрес Вашего сайта в форму, находящуюся в самом верху страницы сайта</li>
<li>Нажмите Submit</li>
<li>Скопируйте сгенерированный для Вашего сайта код и вставьте его в чистый текстовый файл блокнота (notepad)</li>
<li>Сохраните этот текстовый файл под именем <strong>sitemap.xml</strong></li>
<li>Загрузите этот файл в корневую директорию Вашего сайта (туда, где находится домашняя страница сайта)</li>
<li>В адресной строке браузера наберите полный путь к сгенерированному файлу, например http://www.yoursite.com/sitemap.xml. Если Вы всё сделали правильно, то Вы увидите список URL’ов и никаких ошибок</li>
<li>Теперь откройте свой <a title="Google Sitemap аккаунт" href="https://www.google.com/webmasters/sitemaps/login" target="_blank">Google Sitemap аккаунт</a> и добавьте этот путь (из пункта 6) в соответствующую графу в аккаунте</li>
<li>Проделывайте эти шаги применительно к каждому своему сайту.</li>
</ol>
<h4>Резюме</h4>
<p>Google является крупнейшей и популярнейшей поисковой машиной во всём Интернете. Каждый год миллионы веб-сайтов попадают в индекс Google, что естественным образом усложняет задачу нахождения Вашего сайта в результатах поисковой выдачи (SERP). Поэтому создайте и начинайте использовать <strong>Google Sitemap</strong> прямо сейчас.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/how-to-create-a-dynamic-xml-file-google-sitemap.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

