Вопрос по JS

Ответить
Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Есть скрипт для контакта (игра Тюряга) который выводит Кликуху друга в этой игре и другие функции.
Вот как он выглядит:
_ttp://cs10471.vkontakte.ru/u47648229/127794180/x_81682bcc.jpg

Вот код скрипта:

Код: Выделить всё

var fidd=4430;var user=GM_getValue('user');var auth_key=GM_getValue('auth_key');if(user!=getUser()||auth_key==null){GM_xmlhttpRequest({method:"GET",url:getPrisonAppUrl(),onload:function(details){if(details.status==200){var auth_key=details.responseText.match(/\"auth_key\":\"(.+?)\"/)[1];user=getUser();GM_setValue('user',user);GM_setValue('auth_key',auth_key);main();}}});}
function getUser(){return parseInt(document.body.innerHTML.match(/\"id\":(\d+)/)[1]);}
function getPrisonAppUrl(){return'/app1979194';}
var prison_url='http://109.234.156.250/';function createPrisonSection(profile_short,response){var main_info=createSection(profile_short,'Кореш');main_info.appendChild(createRow('Кликуха',response.name));main_info.appendChild(createRow('Авторитет',response.rating));main_info.appendChild(createRow('Сидит в хате',response.background));var bosses_info=createSection(profile_short,'Количество побед');for(var i=0;i<response.bosses.length;i++){var boss=response.bosses[i];bosses_info.appendChild(createRow(boss.name,boss.winsCount));}}
function createSection(profile_short,name){var h4=document.createElement('h4');h4.style.height='4px';var b=document.createElement('b');b.style.paddingLeft='6px';b.style.paddingRight='6px';b.style.fontSize='11px';b.style.backgroundColor='white';var b_value=document.createTextNode(name);b.appendChild(b_value);h4.appendChild(b);var profile_info=document.createElement('div');profile_info.className='profile_info prsion';profile_short.appendChild(h4);profile_short.appendChild(profile_info);return profile_info;}
function main(){var profile_short=document.getElementById('profile_short');if(profile_short!=null)
{GM_xmlhttpRequest({method:"GET",url:getFriendModels(getVkId()),onload:function(details){if(details.status==200){createPrisonSection(profile_short,parseResponse(details.responseText));}}});}}
function parseResponse(theString){var response={}
var parser=new DOMParser();var xmlDoc=parser.parseFromString(theString,"text/xml");var nsResolver=xmlDoc.createNSResolver(xmlDoc.ownerDocument==null?xmlDoc.documentElement:xmlDoc.ownerDocument.documentElement);var ratings=xmlDoc.evaluate('//rating',xmlDoc,nsResolver,XPathResult.ANY_TYPE,null);response.rating=ratings.iterateNext().textContent;var names=xmlDoc.evaluate('//name',xmlDoc,nsResolver,XPathResult.ANY_TYPE,null);response.name=Url.decode(names.iterateNext().textContent);var backgrounds=xmlDoc.evaluate('//background',xmlDoc,nsResolver,XPathResult.ANY_TYPE,null);response.background=formatHata(backgrounds.iterateNext().textContent);var bosses=xmlDoc.evaluate('//boss',xmlDoc,nsResolver,XPathResult.ANY_TYPE,null);var boss=bosses.iterateNext();response.bosses=[];while(boss){response.bosses.push(formatBoss(parseInt(boss.getAttribute('id')),parseInt(boss.textContent)));boss=bosses.iterateNext();}
return response;}
function formatBoss(id,count){var bossNames=['Кирпич','Сизый','Махно','Лютый','Шайба'];var boss={}
boss.name=bossNames[id-1];boss.winsCount=(vkId==fId?count+1:count);return boss;}
function formatHata(id){var hata='Обычная';if(id==1){hata='Кирпича';}else if(id==2){hata='Махно';}else if(id==3){hata='Лютого';}else if(id==4){hata='Шайбы';}
return hata;}
var vkId=getVkId();function getVkId(){var id=document.body.innerHTML.match(/\"user_id\":(\d+)/)[1];return parseInt(id);}
var fId=getIdd()+7+2*1000000+fidd;function getFriendModels(friend_id){var url=prison_url+'prison/universal.php?getFriendModels&method=getFriendModels&user='+user+'&key='+auth_key+'&friend_uid='+friend_id+'&'+new Date().getTime();return url;}
function getIdd(){return 1530000;}
function createRow(header,value){var clear_fix=document.createElement('div');clear_fix.className='clear_fix';var label_fl_l=document.createElement('div');label_fl_l.className='label fl_l';var label_fl_l_value=document.createTextNode(header+':');var labeled_fl_l=document.createElement('div');labeled_fl_l.className='labeled fl_l';var labeled_fl_l_value=document.createTextNode(''+value);clear_fix.appendChild(label_fl_l);clear_fix.appendChild(labeled_fl_l);label_fl_l.appendChild(label_fl_l_value);labeled_fl_l.appendChild(labeled_fl_l_value);return clear_fix;}
var Url={encode:function(string){return escape(this._utf8_encode(string));},decode:function(string){return this._utf8_decode(unescape(string));},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c);}
else if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128);}
else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128);}}
return utftext;},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
else if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
return string;}}
main();
Подскажите как сделать из этого скрипта вот так -> _ttp://ума-онлайн.рф/info.php

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Вот ссылка запроса _ttp://109.234.156.250/prison/universal.php?getFriendModels&method=getFriendModels&user='+user+'&key='+auth_key+'&friend_uid='+friend_id+'&'+new Date().getTime()

user - видимо твой ИД или ИД пользователя, который смотрит.
auth_key - ключ, который можно посмотреть со своей странице приложения. Приложение должно быть добавлено у тебя.
friend_id - ИД пользователя, которого хочешь просмотреть.

ИТОГО, можешь попробовать user и auth_key указать свои, разумеется не в явасриптах. Запрос делать либо через цурл либо через сокет. Если получиться, то хорошо. Возможно прийдется авторизовываться в контакте через цурл, ибо я не могу точно сказать как выдается auth_key.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Спасибо! Теперь такой вопрос:
Искал в скрипте адрес который выводит только имя, но не нашел =( Можешь подсказать?
Когда переходишь по ссылке он выдает всю инфу:
Chudo 12922 0 0 1 2 3 29 26 1 0 1 354 171 356 16 53 3 246 134 272 37 45 229 34 234 126

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Ты видимо прислал то, что тебе браузер показал. Скорее всего это ХМЛ. Просмотри исходный код страницы и выложи его сюда.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Вот:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>

<data>
	<user>
		<name>Chudo</name>
		<rating>12925</rating>
		<background>0</background>
		<vote_availability>0</vote_availability>

		<collections>
			<collection>1</collection>
			<collection>2</collection>
			<collection>3</collection>
			<collection>29</collection>
		</collections>
		<bosses>

			<boss id="1">26</boss>
		</bosses>
        <playerTalents>
            
                <talent id="3">1</talent>
            
        </playerTalents>
        <beard>0</beard>
	</user>

	<clother>
		<id>1</id>

		<item>
			<id>354</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->

			</fillings>
		</item>
		<item>
			<id>171</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>

		</item>
		<item>
			<id>356</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>

		<item>
			<id>16</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>

			<id>53</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>3</id>

			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>246</id>
			<!-- no data in 'depth' -->

			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>134</id>
			<!-- no data in 'depth' -->
			<fillings>

				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>272</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->

			</fillings>
		</item>
		<item>
			<id>37</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>

		</item>
		<item>
			<id>45</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>

		<item>
			<id>229</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>

			<id>34</id>
			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>234</id>

			<!-- no data in 'depth' -->
			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>
		<item>
			<id>126</id>
			<!-- no data in 'depth' -->

			<fillings>
				<!-- no data in 'fillings' -->
			</fillings>
		</item>

	</clother>
</data>

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Ну вот, видишь как все просто. Теперь для того чтобы через пхп имя выдернуть, тебе нужно сделать примерно следующее:

Код: Выделить всё

$xml = new SimpleXMLElement($xmlstr);
$name = '';
if(!empty($xml)) {
  $name=strval($xml->user->name);
}
или xml->data->user->name точно не помню, учитывается ли корневой элемент

Если же чистый JS

Код: Выделить всё

xmlDoc=loadXMLString(xmlstr);
var data=xmlDoc.documentElement;
var name = data.getElementsByTagName("name")[0].text;
Ну или что то вы этом духе. Более подробные примеры работ - ищи в гугле.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Воо все спасибо +) Получилось)

-- добавлено 09 мар 2011, 20:49 --

Еще вопросик. Вот код:

Код: Выделить всё

	<bosses>

			<boss id="1">28</boss>
		</bosses>
Как по твоему примеру вывести число 28?

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Ну мог бы и додумать...

Код: Выделить всё

$xml = new SimpleXMLElement($xmlstr);
$bosses = '';
foreach($xml->user->bosses AS $boss) {
    $attr = $boss->attributes();
    $bosses[$attr['id']]=intval($boss);
} 
На выходе получишь массив из боссов. В данном случае: array('1' => 26);

http://php.net/manual/en/book.simplexml.php
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Что то неробит ( Вставил тег $bosses и выводит только array

-- добавлено 15 мар 2011, 17:56 --

Или как надо? Можешь поподробней плз

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Во первых не тег, а переменную. Во вторых, в ней массив. Судя по структуре их может быть несколько. Поэтому я и сделал вывод массива. Если ты хочешь выводить только первого:

Код: Выделить всё

echo @$bosses[0]; 
Если всех через запятую:

Код: Выделить всё

echo implode(', ', $bosses);  
В общем учись общаться с обычным массивом.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

Ответить