Jump to content
  • 0

Вывод данных с другого сайта


MefistofeleS
 Share

Question

Как можно сделать так, что бы на сайте выводилась информация с другого? например, статус персонажа в игре как тут http://murdrum.ru/char/Obscurus

Подскажите, пожалуйста.

Edited by MefistofeleS
Link to comment
Share on other sites

Recommended Posts

  • 0

А что должно быть на месте символа подчеркивания? :)

for ($__=0; $__ < 3; $__++)

А не всё ли ровно ? в php допустимы такие названия переменных, при желании можно и в кириллице сделать

Link to comment
Share on other sites

  • 0

Я правильно понимаю, что в массив $found[] должны попасть первые три совпадения, и с последующим выводом их через $found[0], $found[1] и так далее? Но что-то я получаю просто три одинаковый первых совпадения...

Link to comment
Share on other sites

  • 0

И кем оно общепринято? Мне больеше нравится $_, оно выглядит как в перле.

Я правильно понимаю, что в массив $found[] должны попасть первые три совпадения, и с последующим выводом их через $found[0], $found[1] и так далее? Но что-то я получаю просто три одинаковый первых совпадения...
Погляжу попозже.
Link to comment
Share on other sites

  • 0
<?php
$file = "<td><a>Десятая</a></td>текст текст<td><a>Восьмая</a></td>текст текст<td><a>Открытая</a></td>текст текст<td><a>Пятая</a></td>текст текст<td><a>Пятая!</a></td>текст текст<td><a>Третяя!</a></td>текст текст";
$found=array();
for ($__=0; $__ < 3; $__++)
{
preg_match("#<td.*?><a.*?>(.*?)</a></td>(.+)$#us", $file, $usr);
$found[] = $usr[1];
$file = $usr[2];
}
print_r($found);
?>

Работает. Я только переносы строк не сделал.

Link to comment
Share on other sites

  • 0

И кем оно общепринято? Мне больеше нравится $_, оно выглядит как в перле.

Мной :facepalmxd: просто логика что i == increment, ну и в учебной литературе, которая попадалась, часто в примерах используется $i в этом качестве.

Если привычен perl, то да, это удобное обозначение для переменных в циклах :)

Link to comment
Share on other sites

  • 0

Работает. Я только переносы строк не сделал. 

Да, все верно, это я накосячик...

А если структура будет такой:


<td>
<a>первая</a>
</td>
<td>
<a>
<img src='name.png'>
вторая
</a>
</td>
<td>
<a>третья</a>
</td>

То бишь, во вторую ссылку попадет еще и ненужное изображение. А как можно поправить регулярку, что бы исключить его попадание?

Link to comment
Share on other sites

  • 0

Поправил вот так: "#<td.*?><a.*?>(.[^<].*?)</a></td>(.+)$#us", так как, между <a> и <img> оказался пробел. А можно вывеси все содержимое массива $found как через print_r, только без Array и индексов массива?

Edited by grafnet
Link to comment
Share on other sites

  • 0

"#<td.*?><a.*?>\s*([^<].*?)</a></td>(.+)$#us"

Лучше вот так, чтобы пробел не выходил, чтобы его могло и не быть, и чтобы он мог быть не один, и чтобы он мог быть хоть переносом строки :facepalmxd:

Вывод содержимого:

foreach ($found as $f) echo "$f
\n";

Link to comment
Share on other sites

  • 0

Вот спасибки, теперь вывод, так как надо :facepalmxd:

А регулярка что-то не сработала, если есть пробел, то <img> все равно попадает.

<?php
$file = "<td><a>первая</a></td>текст текст<td><a> <img src='/img/icons/img.png' title='img.png' alt='img.png'> вторая</a></td>текст текст<td><a>третяя</a></td>текст текст<td><a>Пятая</a></td>текст текст<td><a>Пятая!</a></td>текст текст<td><a>Третяя!</a></td>текст текст";
$found=array();
for ($__=0; $__ < 3; $__++)
{
preg_match("#<td.*?><a.*?>\s*([^<].*?)</a></td>(.+)$#us"
, $file, $usr);
$found[] = $usr[1];
$file = $usr[2];
}
foreach ($found as $f) echo "$f<br>\n";
?>

Edited by grafnet
Link to comment
Share on other sites

  • 0
<?php
$file = "<td><a>первая</a></td>текст текст<td><a> <img src='/img/icons/img.png' title='img.png' alt='img.png'> вторая</a></td>текст текст<td><a>третяя</a></td>текст текст<td><a>Пятая</a></td>текст текст<td><a>Пятая!</a></td>текст текст<td><a>Третяя!</a></td>текст текст";
$found=array();
for ($__=0; $__ < 3; $__++)
{
$fnd=preg_match("#<td.*?><a.*?>\s*([^< ].*?)</a></td>(.+)$#us", $file, $usr);
if (!$fnd) break;
$found[] = $usr[1];
$file = $usr[2];
}
foreach ($found as $f) echo "$f<br>\n";
?>

Добавил пробел в регулярку.

Link to comment
Share on other sites

  • 0
Добавил пробел в регулярку.

Теперь ок.

А как быть с такой структурой?


<table>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
</table>

Где нужно получить, например, первое совпадение из каждой <td></td>, но нет ничего, чем бы нужная ячейка могла отличаться от ненужной.

Link to comment
Share on other sites

  • 0

Ошибка получается

<?php
$file = "<table>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
</table>";
$found=array();
for ($__=0; $__ < 10; $__++)
{
$fnd=preg_match("/<tr>\s*<td>(.+?)</td>\s*<td>.+?</td>\s*<td>.+?</td>\s</tr>/is", $file, $usr);
if (!$fnd) break;
$found[] = $usr[1];
$file = $usr[2];
}
foreach ($found as $f) echo "$f<br>\n";
?>

Warning: preg_match(): Unknown modifier 't' in...

Если вместо разделителя "/" поставить "#", то $fnd пуста.

Edited by grafnet
Link to comment
Share on other sites

  • 0
<?php
$file = "<table>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
<tr>
<td>Нужно</td>
<td>Не нужно</td>
<td>Не нужно</td>
</tr>
</table>";
$found=array();
for ($__=0; $__ < 10; $__++)
{
$fnd=preg_match("#<td>(.+?)</td>.*?</tr>(.*)$#is", $file, $usr);
if (!$fnd) break;
$found[] = $usr[1];
$file = $usr[2];
}
foreach ($found as $f) echo "$f<br>\n";
?>

Link to comment
Share on other sites

  • 0

Ага, с этим понятно.

Хотел вывести все имеющиеся совпадения

<table border="1">
<?php
$url = "<td><a>первая</a></td>текст текст<td><a> <img src='/img/icons/img.png' title='img.png' alt='img.png'> вторая</a></td>текст текст<td><a>третяя</a></td>текст текст<td><a>Пятая</a></td>текст текст<td><a>Пятая!</a></td>текст текст<td><a>Третяя!</a></td>текст текст";
$file = file_get_contents($url);
preg_match_all ("#<td.*?><a.*?>\s*([^<].*?)</a></td>(.+)$#us", $file, $usr);
$c = 1;
foreach ($usr[1] as $f)
{
echo "<tr><td>$c</td><td>$f</td></tr>";
$c++;
}
?>
</table>

Но получил кучу предупреждений, ничего не получилось. Как же это сделать правильно?

Link to comment
Share on other sites

  • 0

Дело в том, что я просто пытаюсь реализовать ту или иную задачу на реальных примерах. То есть, мне не сколько нужен готовый скрипт, сколько понять как он работает, и как его можно сделать. Но самому, пока что, не очень удается, вот и спрашиваю... Ок, пойду опять читать о ругулярках.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy