Показать полную графическую версию : [решено] Сбор информации с сайта и ее обработка.
Собственно хочу добавить в программу сбор информации о ЛЮБОМ фильме с портала Кинопоиск, да еще и так что бы работало все время правильно. Вот список для сбора.
<tr><td>
<h1 style="margin: 0; padding: 0" class="moviename-big">Бросок кобры </h1>
</td></tr>
<tr><td>
<table style="width: 100%; border: none" cellspacing=0 cellpadding=0>
<tr>
<td style="width: 100%">
<span style="color: #666; font-size: 13px">G.I. Joe: The Rise of Cobra</span>
</td>
<tr><td class="type">год</td><td class=""><a href="/level/10/m_act%5Byear%5D/2009/">2009</a></td></tr>
<tr><td class="type">страна</td><td class=""><a href="/level/10/m_act%5Bcountry%5D/3/">США</a></td></tr>
<tr><td class="type">слоган</td><td>«Когда остальные сдаются, они идут до конца»</td></tr>
<tr><td class="type">режиссер</td><td><a href="/level/4/people/23076/">Стивен Соммерс</a></td></tr>
<tr><td class="type">жанр</td><td><a href="/level/10/m_act%5Bgenre%5D/2/">фантастика</a>, <a href="/level/10/m_act%5Bgenre%5D/3/">боевик</a>, <a href="/level/10/m_act%5Bgenre%5D/4/">триллер</a>, <a href="/level/10/m_act%5Bgenre%5D/10/">приключения</a></td></tr>
<tr><td class="type">бюджет</td><td class="dollar"><a href="/level/85/film/397496/">$175 000 000</a></td></tr>
<tr><td class="type">сборы в мире</td><td class="dollar"><a href="/level/85/film/397496/">+ $91 500 000 = $190 077 529</a></td></tr>
<tr><td class="type">премьера (мир)</td><td class="calendar"><a href="/level/80/film/397496/">5 августа 2009</a></td></tr>
<tr><td class="type">премьера (РФ)</td><td class="calendar"> <a class='all' href='/level/8/view/prem/year/2009/#397496'>6 августа 2009</a>, <a href='/level/10/m_act[company]/7/' class='all'>«Централ Партнершип»</a></td></tr>
<tr><td class="type">время</td><td>118 мин.</td></tr>
<tr><td colspan=3 style="padding:10px;padding-left:20px;" class="news">
<span class="_reachbanner_">Базирующееся в Египте высокотехнологичное международное военное подразделение, известное как G.I. Joe, противостоит зловещей корпорации, руководимой знаменитым оружейным бароном.</span>
</td></tr>
<div style="color: #f60; font-family: tahoma; font-size: 25px"><a href="/level/83/film/397496/" class="continue" style="background: url(/images/dot_or.gif) 0 93% repeat-x; font-weight: normal !important; text-decoration: none">7.047<span style="font:100 14px tahoma, verdana"> 4163</span></a>
</div>
<div style="color:#999;font:100 11px tahoma, verdana">IMDB: 6.10 (12 210)</div><div style="color:#999;font:100 11px tahoma, verdana">ожидание: <a href="/level/53/" style='color:#999;font:100 11px tahoma, verdana; text-decoration:underline;'>64%</a> (8 014)</div>
</div>
Жирным и подчеркнутым отмечено то что нужно вырвать
Я набросал кое что. Но не думаю что у меня правильно получилось :( (Честно говоря мне с трудом даются SringRegExpReplase и др.)
Func _Get()
$Sourse = _INetGetSource ($URL)
$sName = StringRegExpReplace($Sourse, '<h1 style=".*" class=".*">(.*)</h1>.*', '\1')
$sName = StringReplace($sName, ' ', ' ')
$sOriginal = StringRegExpReplace($Sourse,'<span style="color: #666; font-size: 13px">(.*)</span>', '\1')
$sGod = StringRegExpReplace($Sourse,'<tr><td class="type">год</td><td class=""><a href=".*">.(.*)</a></td></tr>', '\1')
$sStrana = StringRegExpReplace($Sourse,'<tr><td class="type">страна</td><td class=""><a href=".*">(.*)</a></td></tr>', '\1')
$sSlogan = StringRegExpReplace($Sourse,'<tr><td class="type">слоган</td><td>(.*)</td></tr>','\1')
$sSlogan = StringReplace($sName, '»', '"')
$sRejisser =StringRegExpReplace($Sourse,'<tr><td class="type">режиссер</td><td><a href=".*">(.*)</a></td></tr>','\1')
$sJanr = StringRegExp($Sourse,'<tr><td class="type">жанр</td><td><a href=".*">(.*)</a>.*',)
$sSbory = StringRegExpReplace($Sourse,,'\1')
$sMir =StringRegExpReplace($Sourse,,'\1')
$sRF = StringRegExpReplace($Sourse,,'\1')
$sTime = StringRegExpReplace($Sourse,,'\1')
$sKratk = StringRegExpReplace($Sourse,,'\1')
$sRait = StringRegExpReplace($Sourse,,'\1')
$sIdmb = StringRegExpReplace($Sourse,,'\1')
$sBudget = StringRegExpReplace($Sourse, '<tr><td class="type">бюджет</td><td class=".*"><a href=".*">(.*)</a>.*', '\1')
$sBudget = StringReplace($sBudget, ' ', ' ')
EndFunc
Запнулся(и упал + сломал думалку:)) на жанре т.к. их там несколько и не смог вырвать...
$Sourse = _INetGetSource ($URL)
А где ссылка?
Извиняюсь.. http://www.kinopoisk.ru/level/1/film/397496/
Вот ссылка
Medic84, На будущее, всегда выкладывай рабочий пример, в твоём коде также нехватает инклюда Inet.au3.
Вот ссылка »
По этой ссылке нужно делать запрос, там так просто через исходник не получить нужную страничку.
P.S
А в чём смысл замены пробела на пробел? :)
P.S
А в чём смысл замены пробела на пробел? »
Да это форум обрабатывает Html код там написанный. Там по идее & nbsp; Только без пробела
По этой ссылке нужно делать запрос, там так просто через исходник не получить нужную страничку. »
Всмысле? Что за запрос?На будущее, всегда выкладывай рабочий пример, в твоём коде также нехватает инклюда Inet.au3. »
Хорошо :)
Всмысле? Что за запрос? »
Ну а как ты получаешь исходник того, что видишь в браузере? Попробуй сохранить $Source в файл «test.html» и запустить его, у меня лично страница с запросом поиска не получается...
В опере нажимаю "Исходный код".
Думаешь через IE нужно страницу сохранять?
З.Ы.
А ты пробовал слеш убирать? :)
А ты пробовал слеш убирать? »
Пробовал, тоже самое.
Вобщем вот рабочий вариант получения информации о фильме по ссылке. Исходник добывается извращённым путём - через скрытую инстанцию браузера IE :)
#include <IE.au3>
$sURL = "http://www.kinopoisk.ru/level/1/film/333416/"
$sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200)
If @error Then Exit
$oIE = _IECreate($sURL, 0, 0)
$sSource = _IEDocReadHTML($oIE)
_IEQuit($oIE)
$sName = _GetSourceProperty($sSource, '', '(?si).*?<h1 class=moviename-big.*?>(.*?)</h1>.*')
$sSlogan = _GetSourceProperty($sSource, 'слоган')
$sBudget = _GetSourceProperty($sSource, 'бюджет')
$sYear = _GetSourceProperty($sSource, 'год')
$sCountry = _GetSourceProperty($sSource, 'страна')
$sDirector = _GetSourceProperty($sSource, 'режиссер')
$sUSA_Collect = _GetSourceProperty($sSource, 'сборы в США')
$sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире')
$sRus_Collect = _GetSourceProperty($sSource, 'сборы в России')
$sTime = _GetSourceProperty($sSource, 'время')
$aJanrs = StringRegExp($sSource, '.*?<A href="/level/10/.*?genre.*?">(.*?)</A>.*?', 3)
$sJanrs = ""
$iUbound = UBound($aJanrs)-1
For $i = 0 To $iUbound
$sJanrs &= $aJanrs[$i]
If $i < $iUbound Then $sJanrs &= ", "
Next
$sInfo = StringFormat( _
"Имя:\t\t\t%s\n" & _
"Слоган:\t\t\t%s\n" & _
"Бюджет:\t\t\t%s\n" & _
"Год:\t\t\t%s\n" & _
"Страна:\t\t\t%s\n" & _
"Режиссер:\t\t%s\n" & _
"Сборы в США:\t\t%s\n" & _
"Сборы в мире:\t\t%s\n" & _
"Сборы в России:\t\t%s\n" & _
"Время:\t\t\t%s\n\n" & _
"Жанр:\t\t\t%s", _
$sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sUSA_Collect, $sWorld_Collect, $sRus_Collect, $sTime, $sJanrs)
MsgBox(64, 'Kinopoisk.ru Info', $sInfo)
;Функция для получения подстроки по заданному pattern
Func _GetSourceProperty($sSource, $sName, $sPattern='')
Local $s_Pattern = '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>(?:<A href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*'
If $sPattern <> '' Then $s_Pattern = $sPattern
$s_Pattern = StringFormat($s_Pattern, $sName)
Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1')
If @extended = 0 Then Return SetError(1, 0, "N/A")
$sRet = StringReplace($sRet, ' ', ' ')
$sRet = StringRegExpReplace($sRet, '\A«+|»+$', '"')
Return $sRet
EndFunc
Если бы можно было оценку поставить поставил бы 10 баллов!
Хех. Пытался вставить свое и свое ничего не работает. Кроме краткого....
Причем в твоем скрипте "Имя" не работает.
#include <IE.au3>
$sURL = "http://www.kinopoisk.ru/level/1/film/5090/"
$sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200)
If @error Then Exit
$oIE = _IECreate($sURL, 0, 0)
$sSource = _IEDocReadHTML($oIE)
_IEQuit($oIE)
$sName = _GetSourceProperty($sSource, '', '(?si).*?<h1 class=moviename-big>(.*?)</h1>.*')
$sSlogan = _GetSourceProperty($sSource, 'слоган')
$sBudget = _GetSourceProperty($sSource, 'бюджет')
$sYear = _GetSourceProperty($sSource, 'год')
$sCountry = _GetSourceProperty($sSource, 'страна')
$sMir = _GetSourceProperty($sSource, 'премьера (мир)')
$sRF = _GetSourceProperty($sSource, 'премьера (РФ)')
$sOriginal = _GetSourceProperty($sSource, '','?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*')
$sDirector = _GetSourceProperty($sSource, 'режиссер')
$sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире')
$sTime = _GetSourceProperty($sSource, 'время')
$aJanrs = StringRegExp($sSource, '.*?<A href="/level/10/.*?genre.*?">(.*?)</A>.*?', 3)
$sJanrs = ""
$Kratk = _GetSourceProperty($sSource, '','(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*')
$Kratk = StringReplace($Kratk,"<BR>",@CRLF)
$iUbound = UBound($aJanrs)-1
For $i = 0 To $iUbound
$sJanrs &= $aJanrs[$i]
If $i < $iUbound Then $sJanrs &= ", "
Next
$sInfo = StringFormat( _
"Имя:\t\t\t%s\n" & _
"Слоган:\t\t\t%s\n" & _
"Бюджет:\t\t\t%s\n" & _
"Год:\t\t\t%s\n" & _
"Страна:\t\t\t%s\n" & _
"Режиссер:\t\t%s\n" & _
"Премьера (Мир):\t\t%s\n" & _
"Сборы в мире:\t\t%s\n" & _
"Премьера (РФ):\t\t%s\n" & _
"Время:\t\t\t%s\n\n" & _
"Жанр:\t\t\t%s", _
$sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sMir, $sWorld_Collect, $sRF, $sTime, $sJanrs)
MsgBox(64, 'Kinopoisk.ru Info', $sInfo)
;Функция для получения подстроки по заданному pattern
Func _GetSourceProperty($sSource, $sName, $sPattern='')
Local $s_Pattern = '(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>(?:<A href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*'
If $sPattern <> '' Then $s_Pattern = $sPattern
$s_Pattern = StringFormat($s_Pattern, $sName)
Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1')
If @extended = 0 Then Return SetError(1, 0, "N/A")
$sRet = StringReplace($sRet, ' ', ' ')
$sRet = StringRegExpReplace($sRet, '\A«+|»+$', '"')
Return $sRet
EndFunc
З.Ы. А что делать если несколько режисеров?
Medic84,
Вот подправил:
#include <IE.au3>
$sURL = "http://www.kinopoisk.ru/level/1/film/5090"
$sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200)
If @error Then Exit
$oIE = _IECreate($sURL, 0, 0)
$sSource = _IEDocReadHTML($oIE)
_IEQuit($oIE)
$sName = _GetSourceProperty($sSource, '', '(?si).*?<h1 class=moviename-big.*?>(.*?)</h1>.*')
$sSlogan = _GetSourceProperty($sSource, 'слоган')
$sBudget = _GetSourceProperty($sSource, 'бюджет')
$sYear = _GetSourceProperty($sSource, 'год')
$sCountry = _GetSourceProperty($sSource, 'страна')
$sWorld_Primier = _GetSourceProperty($sSource, 'премьера (мир)')
$sRF_Primier = _GetSourceProperty($sSource, 'премьера (РФ)')
$sOriginal = _GetSourceProperty($sSource, '', '(?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*')
$sDirector = _GetSourceProperty($sSource, 'режиссер')
$sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире')
$sTime = _GetSourceProperty($sSource, 'время')
$Kratk = _GetSourceProperty($sSource, '', '(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*')
$sJaners = _GetSourceProperty($sSource, 'жанр')
$sInfo = StringFormat( _
"Имя:\t\t\t%s\n" & _
"Слоган:\t\t\t%s\n" & _
"Бюджет:\t\t\t%s\n" & _
"Год:\t\t\t%s\n" & _
"Страна:\t\t\t%s\n" & _
"Режиссер:\t\t%s\n" & _
"Премьера (Мир):\t\t%s\n" & _
"Сборы в мире:\t\t%s\n" & _
"Премьера (РФ):\t\t%s\n" & _
"Время:\t\t\t%s\n" & _
"Жанр:\t\t\t%s", _
$sName, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sWorld_Primier, $sWorld_Collect, $sRF_Primier, $sTime, $sJaners)
MsgBox(64, 'Kinopoisk.ru Info', $sInfo)
;Функция для получения подстроки по заданному pattern
Func _GetSourceProperty($sSource, $sName, $sPattern = '')
Local $s_Pattern = _
'(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>' & _
'(?:<A(?: class=.*?|) href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*'
If $sPattern <> '' Then $s_Pattern = $sPattern
$s_Pattern = StringFormat($s_Pattern, "\Q" & $sName & "\E")
Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1')
If @extended = 0 Then Return SetError(1, 0, "N/A")
$sRet = _ContentReplaceTags($sRet, 2)
$sRet = StringRegExpReplace($sRet, '«+|»+', '"')
Return $sRet
EndFunc
Func _ContentReplaceTags($sString, $iCorrect=-1)
Local $aCorrects_Arr[8][2] = [[7], _
['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _
['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']]
Local $sReplStr = '\\n'
If $iCorrect = 2 Then $sReplStr = @CRLF
Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr)
$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '')
For $i = 1 To $aCorrects_Arr[0][0]
$sRet_Content = StringReplace($sRet_Content, $aCorrects_Arr[$i][0], $aCorrects_Arr[$i][1])
Next
If $iCorrect = 1 Then Return $sRet_Content
Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>')
If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos)
Return $sRet_Content
EndFunc
А что такое $sOriginal?
P.S
Кстати, кроме «& nbsp;» ещё могут встречаться и другие теги(?), у меня где то была функция для их полной замены...
у меня где то была функция для их полной замены »
Вот она:
Func _ContentReplaceTags($sString, $iCorrect=-1)
Local $aCorrects_Arr[8][2] = [[7], _
['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _
['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']]
Local $sReplStr = '\\n'
If $iCorrect = 2 Then $sReplStr = @CRLF
Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr)
$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '')
For $i = 1 To $aCorrects_Arr[0][0]
$sRet_Content = StringReplace($sRet_Content, $aCorrects_Arr[$i][0], $aCorrects_Arr[$i][1])
Next
If $iCorrect = 1 Then Return $sRet_Content
Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>')
If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos)
Return $sRet_Content
EndFunc
Подправил свой пример выше.
А что такое $sOriginal? »
Оригинальное название фильма. Как правило для английских фильмов
Имя фильма поправил на
(?si).*?<h1 style=(?si).*?class=moviename-big.*?>(.*?)</h1>.*
Так как не определялось. Осталось самое сложное. И я отстану)))
1. Рейтинг фильма. IDMB я вставил сам, а вот с обычным рейтингом незадача.
<div style="color: #f60; font-family: tahoma; font-size: 25px"><a href="/level/83/film/392930/" class="continue" style="background: url(/images/dot_or.gif) 0 93% repeat-x; font-weight: normal !important; text-decoration: none">7.952<span style="font:100 14px tahoma, verdana"> 10591</span></a>
2. Добавление Актеров.
У меня есть Элемент List Хочу добавить актеров с помощью _GUICtrlListBox_AddString($roles_List, "Актер")
<tr><td style="height: 31px; text-align: right; border: none; padding-right: 10px"><span style="color: #f60">В главных ролях:</span></td></tr>
<tr><td style="height: 10px"><br /></td></tr>
<tr><td style="height: 100%; vertical-align: top; padding-right:10px">
<table style="width: 100%; border: none" cellspacing=0 cellpadding=0>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/6464/" class="all">Джон Легуизамо</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/25385/" class="all">Куин Латифа</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/4092/" class="all">Денис Лири</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/41961/" class="all">Саймон Пегг</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/15869/" class="all">Джош Пек</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/35310/" class="all">Рэй Романо</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/297/" class="all">Шонн Уильям Скотт</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/1235771/" class="all">Карен Дишер</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/39391/" class="all">Крис Уэдж</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/4/people/687150/" class="all">Юнис Чо</a></td></tr>
<tr><td style="vertical-align: top; height: 15px" align=right><a href="/level/19/film/392930/" class="all">...</a></td></tr>
Вобщем нужно захватить всех актеров в массив после В главных ролях: и до троеточия (т.к. там еще актеры есть)
Имя фильма поправил на »
Так как не определялось »
А у меня наоборот с твоим методом не определяется :). Попробуй так:
(?si).*?<h1.*?class=moviename-big.*?>(.*?)</h1>.*
Осталось самое сложное »
#include <IE.au3>
$sURL = "http://www.kinopoisk.ru/level/1/film/89515"
$sURL = InputBox("Kinopoisk.ru Informer", "Введите ссылку на фильм для получения информации:", $sURL, "", 350, 200)
If @error Then Exit
$oIE = _IECreate($sURL, 0, 0)
$sSource = _IEDocReadHTML($oIE)
_IEQuit($oIE)
$sName = _GetSourceProperty($sSource, '', '(?si).*?<h1.*?class=moviename-big.*?>(.*?)</h1>.*')
$sOrigin_Name = _GetSourceProperty($sSource, '', '(?si).*?<span style="color:.*? font-size:.*?">(.*?)</span>.*')
$sSlogan = _GetSourceProperty($sSource, 'слоган')
$sBudget = _GetSourceProperty($sSource, 'бюджет')
$sYear = _GetSourceProperty($sSource, 'год')
$sCountry = _GetSourceProperty($sSource, 'страна')
$sWorld_Primier = _GetSourceProperty($sSource, 'премьера (мир)')
$sRF_Primier = _GetSourceProperty($sSource, 'премьера (РФ)')
$sDirector = _GetSourceProperty($sSource, 'режиссер')
$sWorld_Collect = _GetSourceProperty($sSource, 'сборы в мире')
$sTime = _GetSourceProperty($sSource, 'время')
$sJaners = _GetSourceProperty($sSource, 'жанр')
$sRaiting = _GetSourceProperty($sSource, '', '(?si).*?<A class=continue style=".*?" href=".*?">(.*?)<SPAN.*?>.*?</SPAN></A>.*')
$sIMDB_Raiting = _GetSourceProperty($sSource, '', '(?si).*?<DIV style=".*?">IMDB: (.*?)</DIV>.*')
$sDescription = _GetSourceProperty($sSource, '', '(?si).*?<span class=_reachbanner_.*?>(.*?)</span>.*')
$sActors = _GetSourceProperty($sSource, '', '(?si).*?В главных ролях:.*?<A class=all href=".*?">(.*?)\.\.\.</A></TD></TR>.*')
$sActors = StringRegExpReplace($sActors, '(\n\r)+|\A\s+|\s+$', '')
$sInfo = StringFormat( _
"Имя:\t\t\t%s\n" & _
"Оригин. Имя:\t\t\t%s\n" & _
"Слоган:\t\t\t%s\n" & _
"Бюджет:\t\t\t%s\n" & _
"Год:\t\t\t%s\n" & _
"Страна:\t\t\t%s\n" & _
"Режиссер:\t\t%s\n" & _
"Премьера (Мир):\t\t%s\n" & _
"Сборы в мире:\t\t%s\n" & _
"Премьера (РФ):\t\t%s\n" & _
"Время:\t\t\t%s\n" & _
"Жанр:\t\t\t%s\n" & _
"Рейтинг:\t\t\t%s\n" & _
"Рейтинг IMDB:\t\t%s\n\n" & _
"[В главных ролях]:\n%s\n\n" & _
"[Описание]:\n%s\n\n", _
$sName, $sOrigin_Name, $sSlogan, $sBudget, $sYear, $sCountry, $sDirector, $sWorld_Primier, _
$sWorld_Collect, $sRF_Primier, $sTime, $sJaners, $sRaiting, $sIMDB_Raiting, $sActors, $sDescription)
MsgBox(64, 'Kinopoisk.ru Info', $sInfo)
;Функция для получения подстроки по заданному pattern
Func _GetSourceProperty($sSource, $sName, $sPattern = '', $iGetArr=0)
Local $s_Pattern = _
'(?si).*?<TD class=type>%s</TD>.*?<TD(?: class=.*?|)>' & _
'(?:<A(?: class=.*?|) href=".*?">|)(.*?)(?:</A>|)</TD></TR>.*'
If $sPattern <> '' Then $s_Pattern = $sPattern
If $sName <> '' Then $s_Pattern = StringFormat($s_Pattern, "\Q" & $sName & "\E")
If $iGetArr = 0 Then
Local $sRet = StringRegExpReplace($sSource, $s_Pattern, '\1')
If @extended = 0 Then Return SetError(1, 0, "N/A")
Else
Return StringRegExp($sSource, $s_Pattern, 3)
EndIf
$sRet = _ContentReplaceTags($sRet, 2)
$sRet = StringRegExpReplace($sRet, '«+|»+', '"')
Return $sRet
EndFunc
Func _ContentReplaceTags($sString, $iCorrect=-1)
Local $aTags_Arr[8][2] = [[7], _
['&qu' & 'ot;', '"'], ['&a' & 'mp;', '&'], ['&' & '#39;', "'"], _
['&ap' & 'os;', "'"], ['&g' & 't;', '>'], ['&l' & 't;', '<'], ['&nb' & 'sp;', ' ']]
Local $sReplStr = '\\n'
If $iCorrect = 2 Then $sReplStr = @CRLF
Local $sRet_Content = StringRegExpReplace($sString, '(?i)<(/|)br(/| /|)>|\n|\r|\r\n', $sReplStr)
$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|).*?>|<hr(/| /|)>', '')
;$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '')
For $i = 1 To $aTags_Arr[0][0]
$sRet_Content = StringReplace($sRet_Content, $aTags_Arr[$i][0], $aTags_Arr[$i][1])
Next
If $iCorrect = 1 Then Return $sRet_Content
Local $iCheckSpanPos = StringInStr($sRet_Content, '</s>')
If $iCheckSpanPos > 0 Then $sRet_Content = StringTrimLeft($sRet_Content, $iCheckSpanPos)
Return $sRet_Content
EndFunc
;$sRet_Content = StringRegExpReplace($sRet_Content, '(?si)<(/|)[abiu]( .*?|)>|<hr(/| /|)>', '')
А что это за строчка? ее можно удалить?
И что то рейтинг не работает :(
И актеры это не массив :(
Выдает ошибку.
Вобще ерунда какая то. Программа вообще критическую ошибку выдает. И выдает отчет.... Посмотри пожалуйста если есть время. Там некоторые строчки с комментариями :)
Вобще ерунда какая то »
И вправду. Так кодить нельзя ;) Вот возвращаю тебе пофиксенный вариант, плюс пару поправок/улучшении.
Habetdin
18-08-2010, 12:08
Kinopoisk.ru_Info_Collector.zip »
С нынешней версткой kinopoisk'а не работает получение списка актеров :(
<!-- актеры фильма -->
<td class="actor_list">
<span class="title">В главных ролях:</span>
<span><a href="/level/4/people/20866/">Анджелина Джоли</a></span>
<span><a href="/level/4/people/8453/">Лив Шрайбер</a></span>
<span><a href="/level/4/people/33495/">Чиветел Эджиофор</a></span>
<span><a href="/level/4/people/140922/">Даниэль Ольбрыхский</a></span>
<span><a href="/level/4/people/2526/">Аугуст Диль</a></span>
<span><a href="/level/4/people/65480/">Дэниэл Пирс</a></span>
<span><a href="/level/4/people/157465/">Хант Блок</a></span>
<span><a href="/level/4/people/12590/">Андре Брогер</a></span>
<span><a href="/level/4/people/12641/">Олек Крупа</a></span>
<span><a href="/level/4/people/44117/">Кэссиди Хинкль</a></span>
<span><a href="/level/19/film/447284/">...</a></span>
<span class="title">Роли дублировали:</span>
<span><a href="/level/4/people/1646297/">Ольга Зубкова</a></span>
<span><a href="/level/4/people/1079049/">Валерий Соловьев</a></span>
<span><a href="/level/4/people/277374/">Станислав Концевич</a></span>
<span class="title"><a href="/level/19/film/447284/">показать всех</a> »</span>
</td>
</tr>
<!-- /актеры фильма -->
Кстати, название фильма "правильнее собирается" вот так:
$sName = _GetSourceProperty($sSource, '', '(?si).*?<h1.*?class=moviename-big.*?>(.*?)</h1>.*')
If $sName <> 'N/A' Then
$sName = StringReplace($sName, ' (видео)', '')
$sName = StringReplace($sName, ' (ТВ)', '')
$sName = StringTrimRight($sName, 1)
EndIf
...
$sJanrs = _GetSourceProperty($sSource, 'жанр')
$sJanrs = StringReplace($sJanrs, ", ...", "")
А при сохранении файла нужно убрать "плохие" символы из имени:
$fName = StringReplace($Name, '\', '')
$fName = StringReplace($fName, '/', '')
$fName = StringReplace($fName, ':', '')
$fName = StringReplace($fName, '*', '')
$fName = StringReplace($fName, '?', '')
$fName = StringReplace($fName, '"', '')
$fName = StringReplace($fName, '<', '')
$fName = StringReplace($fName, '>', '')
$fName = StringReplace($fName, '|', '')
$hOpen = FileOpen($fName & ".txt", 2)
Коряво, конечно, но меня устраивает :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC