Что нового

Считывание информации с интернет страницы

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:
Нужно считать информацию с интернет страницы
например с
http://www.peredovaya.ru/battle/battleLog.jsp?battleId=23669343&playerId=652466&1316593231173
или
http://www.peredovaya.ru/battle/battleLog.jsp?battleId=21982005&playerId=652466&1316593331809
1)со страницы нужно посчитать полный урон каждого участника боя или любого одного
2 ) урон считывать с вкладки -лог
3) подсчитанный урон показать в Gui окне (п) Петя, урон - 544
Примечания:

! урон брать не с вкладки статистика . а с вкладки лог
заранее спасибо :smile:
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
:scratch: Немного упрощу -
со страницы http://www.peredovaya.ru/battle/historyLog.jsp?battleId=21982005&playerId=652466#
подсчитать урон участника боя - Innuendo
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Так ?:
Код:
#include <INet.au3>
#include <Array.au3>

$URL = 'http://www.peredovaya.ru/battle/historyLog.jsp?battleId=21982005&playerId=652466#'
$HTML = _INetGetSource($URL)
$RegExp = StringRegExp($HTML, '(?s)-\d{1,3}', 3)

_ArrayDisplay($RegExp, 'Innuendo')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
yuran2 [?]
подсчитать урон участника боя - Innuendo
Попробуйте так:
Код:
$s_User = '<b>Innuendo</b>'
$s_Text = ''
$i_Count_Minus = 0
$s_Url = 'http://www.peredovaya.ru/battle/historyLog.jsp?battleId=21982005&playerId=652466&page='
For $i = 1 To 4
	$s_Sourse = InetRead($s_Url & $i, 17)
	If Not @error Then
		$s_Sourse = BinaryToString($s_Sourse, 4)
		$s_Text &= $s_Sourse & '
'
	EndIf
Next
If Not $s_Text Then
	MsgBox(16, 'Error', 'InetRead')
	Exit
EndIf
;FileWrite('5l.txt', $s_Text)
$a_Sourse = StringSplit(StringReplace(StringStripCR($s_Text), @LF, ''), '
', 1)
For $i = 1 To $a_Sourse[0]
	If StringRegExp($a_Sourse[$i], '.*<b>.*</b>.*' & $s_User & '.*\d+.*') Then
		$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*>(-?\d+)<.*', '$1')
		If @extended = 1 Then
			ConsoleWrite($i_Temp & @LF)
			$i_Temp = Number($i_Temp)
			$i_Count_Minus += $i_Temp
		EndIf
	EndIf
	If StringRegExp($a_Sourse[$i], $s_User & '.*\+.*\d+.*') Then
		$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*>(\d+)<.*', '$1')
		If @extended = 1 Then
			ConsoleWrite($i_Temp & @LF)
			$i_Temp = Number($i_Temp)
			$i_Count_Minus += $i_Temp
		EndIf
	EndIf
	If StringRegExp($a_Sourse[$i], $s_User & '.*теряет') Then
		$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*теряет\h(\d+)\hединиц.*', '$1')
		If @extended = 1 Then
			ConsoleWrite('-' & $i_Temp & @LF)
			$i_Temp = Number($i_Temp)
			$i_Count_Minus -= $i_Temp
		EndIf
	EndIf
Next
MsgBox(64, 'Info', 'Минусов: ' & $i_Count_Minus)

Не обрабатываются строки типа Innuendo в результате кровотечения теряет 5 единиц здоровья. Я не знаю, надо их обрабатывать или нет.
Обрабатываются строки вида:
Выстрелом в живот доктор чума поразил Innuendo, пробив препятствие -35 [274/457] берем -35.
Innuendo в результате кровотечения теряет 5 единиц здоровья берем -5.
Innuendo перебинтовала кровоточащие раны +200 [372/457] берем 200.
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
спасибо :smile: madmasles
работает но если строка будет следующего вида :
Очередь, пущенная ляляля зацепила: туту -45 [1000/1133],туту -30 [970/1133],туту -37 [933/1133] - то скрипт считывает последнюю -37


Очередь, пущенная <b>ляляля</b> зацепила: <b><b>туту</b> <font color='#FF0000'>-45</font> [1000/1133],<b>туту</b> <font color='#FF0000'>-30</font> [970/1133],<b>туту</b> <font color='#FF0000'>-37</font> [933/1133]</b>
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
yuran2 [?]
но если строка будет следующего вида :
Очередь, пущенная ляляля
На страницах по Вашим ссылкам таких словосочетаний нет. Дайте ссылку, где они есть.
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
madmasles
http://www.peredovaya.ru/battle/historyLog.jsp?battleId=23669343&playerId=652466&page=2
для любого персонажа

к примеру персонаж Зевс
-88
пропускает -45, -30
-37
пропускает -39
-18
.... и т.д.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
yuran2,
Вроде так считает для всех участников:
Код:
#include <Array.au3>

Dim $aUser[1][3]
$s_Text = ''
;$s_Url = 'http://www.peredovaya.ru/battle/historyLog.jsp?battleId=23669343&playerId=652466&page='
$s_Url = 'http://www.peredovaya.ru/battle/historyLog.jsp?battleId=21982005&playerId=652466&page='
For $i = 1 To 5
	$s_Sourse = InetRead($s_Url & $i, 17)
	If Not @error Then
		$s_Sourse = BinaryToString($s_Sourse, 4)
		$s_Text &= $s_Sourse & '
'
	EndIf
Next
If Not $s_Text Then
	MsgBox(16, 'Error', 'InetRead')
	Exit
EndIf
$s_Text = StringRegExpReplace($s_Text, '</?font.*?>', '')
$aUserTemp = StringRegExp($s_Text, '<b>[^<>Ход].+?</b>', 3)
$aUserTemp = _ArrayUnique($aUserTemp)
ReDim $aUser[$aUserTemp[0] + 1][3]
$aUser[0][0] = $aUserTemp[0]
For $i = 1 To $aUser[0][0]
	$aUser[$i][0] = StringRegExpReplace($aUserTemp[$i], '^<b>(.*?)</b>$', '$1')
	$aUser[$i][2] = $aUserTemp[$i]
Next
$aUserTemp = 0
$a_Sourse = StringSplit(StringReplace(StringStripCR($s_Text), @LF, ''), '
', 1)
For $i = 1 To $a_Sourse[0]
	For $j = 1 To $aUser[0][0]
		If StringRegExp($a_Sourse[$i], '.*<b>.*</b>.*' & $aUser[$j][2] & '.*?\h-\d+\h') Then
			StringReplace($a_Sourse[$i], $aUser[$j][2], '')
			If @extended > 1 Then
				$aTemp = StringRegExp($a_Sourse[$i], $aUser[$j][2] & '.*?\h(-\d+)\h', 3)
				For $w = 0 To UBound($aTemp) - 1
					$aUser[$j][1] += Number($aTemp[$w])
				Next
			Else
				$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*' & $aUser[$j][2] & '.*?\h(-?\d+)\h.*', '$1')
				If @extended = 1 Then
					$i_Temp = Number($i_Temp)
					$aUser[$j][1] += $i_Temp
				EndIf
			EndIf
		EndIf
		If StringRegExp($a_Sourse[$i], $aUser[$j][2] & '.*\+\d+.*') Then
			$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*\+(\d+)\h.*', '$1')
			If @extended = 1 Then
				$i_Temp = Number($i_Temp)
				$aUser[$j][1] += $i_Temp
			EndIf
		EndIf
		If StringRegExp($a_Sourse[$i], $aUser[$j][2] & '.*теряет.*\d+') Then
			$i_Temp = StringRegExpReplace($a_Sourse[$i], '.*теряет\h(\d+)\h.*', '$1')
			If @extended = 1 Then
				$i_Temp = Number($i_Temp)
				$aUser[$j][1] -= $i_Temp
			EndIf
		EndIf

	Next
Next
ReDim $aUser[$aUser[0][0] + 1][2]
_ArrayDisplay($aUser)
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
madmasles
:smile:спасибо. на практике скрипт все высчитал правильно ,
но! ) он считает ущерб каждого участника( сколько ему нанесли противники минусов) ,еще бы наоборот посчитать урон каждого участника (сколько он нанес минусов противникам )
тогда
строки
Innuendo в результате кровотечения теряет 5 единиц .
Innuendo перебинтовала кровоточащие раны +200 [372/457]
выпадают
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
:ok:madmasles чуть подправил стал высчитывать урон каждого участника :smile:, только вот седьмой участник доктор чума выпадает что-то
непонятное с буквами или с сочетанием букв ( не могу понять)
 
Автор
Y

yuran2

Хочу все уметь
Сообщения
38
Репутация
0
:beer: Изменил и добавил Строки и шаблоны для поиска все заработало с небольшими недостатками
 
Верх