2010-06-25 4 views
1

Я пытаюсь захватить/извлечь текст из другого URL-адреса с помощью cURL. Местоположение, где я беру текст, находится в пределах чистого документа HTML с динамическими (не статическими) данными, поэтому для фильтрации не существует HTML-тегов. Это то, что я получил до сих пор:Как использовать cURL для извлечения текста

$c = curl_init('http://url.com/dataid='.$_POST['username']); 
curl_setopt(CURLOPT_RETURNTRANSFER, true); 
curl_setopt(CURLOPT_FRESH_CONNECT, true); 

$html = curl_exec($c); 

if (curl_error($c)) 
die(curl_error($c)); 

// Get the status code 
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 

curl_close($c); 

Это прекрасно работает, однако в конце динамического HTML документа есть не-искомый текст, «#endofscript» (без кавычек). Это схватывается/выбирается, так что можно сделать, чтобы не схватить это? Я пробовал смотреть на «strpos» и такие, но я не уверен, как интегрировать это с cURL.

Все/Любая помощь будет/будет оценена. :)

EDIT: Код настоящее время я использую:

<?php 

$homepage = file_get_contents('http://stackoverflow.com/'); 

$result = substr("$homepage", 0, -12); 

echo $result; 

?> 
+1

Вы уверены, что проблема не существует в пределах cURL? Для меня это выглядит так: «#endofscript» - это результат вывода скрипта, который генерирует/отправляет текст, который вы извлекаете. – Poni

+0

Попробуйте выбрать не динамический текст/страницу, и если будет написан текст «#endofscript», то это будет cURL, кто его вызывает, иначе вы должны изучить другую сторону (скрипт сервера). – Poni

+0

Привет, Да, вы правы. Текст «#endofscript» находится в динамическом HTML-документе и не связан с скриптом cURL. Сценарий cURL просто подбирает текст «#endofscript» и отображает его на моей веб-странице. Я спрашиваю, есть ли там, чтобы не схватить это? С уважением, и я ценю ваш ответ.:) – AUllah1

ответ

2

почему бы не использовать просто

<?php 
$homepage = file_get_contents('http://www.example.com/'); 
echo $homepage; 
?> 

http://php.net/manual/en/function.file-get-contents.php

+0

Это прекрасное решение, если код работает только на вашем сервере, а ваш сервер поддерживает 'file_get_contents'. Но если этот код должен быть распространен (например, в плагине WordPress, например), вы не можете полагаться на параметры сервера, разрешающие использование 'file_get_contents'. Как минимум, в этом случае должен быть резерв «завитка». – kingjeffrey

+0

Спасибо за ответ и комментарий, я ценю их. Нет, код не будет распространяться и останется на одном сервере. Я теперь применил этот код на веб-странице, а не используя cURL, однако он просто приносит тот же результат. Мне нужно найти способ, чтобы текст «#endofscript» не отображался. С уважением. :) – AUllah1

+0

Это был только самый простой способ работать с))) Рады приветствовать))) – GOsha

0

Спасибо всем за вашу помощь, я не могу сказать, насколько я их ценю! Используя скрипт, предоставленный GOsha, мне удалось изменить его так, чтобы он удалял конечный текст. Используемый код приведен ниже:

<?php 

$homepage = file_get_contents('http://url.com/dataid='.$_POST['username']); 

$rest = substr("$homepage", 0, -12); 
echo $rest; 

?> 

Этому ответили. Спасибо всем, я очень благодарен за все ваши ответы. :)

1

Вы можете использовать preg_replace(), чтобы удалить все строки, начинающиеся с символа "#", например:

$res = preg_replace('/^#.*$[\\r\\n]*/m','',$dat); 

или просто

'/#endofscript$/' 

, чтобы соответствовать штучка в конце.

substr/str_replace/некоторые другие строковые функции также будут работать.


Некоторые примеры кода, как реализовать метод зиЬзЬг/preg_replace:

<pre><?php 

$dat = 'Lorem ipsum dolor sit amet, 
     consectetur adipisicing 
     elit #endofscript'; 

// either 
if (substr($dat,-12) == '#endofscript') 
    $res = substr($dat,0,-12); 

var_dump($res); 

// or 
$res = preg_replace('/#endofscript$/','',$dat); 
var_dump($res); 

?></pre> 
+0

Спасибо за ответ Kuchen, я бы хотел использовать этот метод, поскольку я заметил, что substr не только удалил текст #endofscript, но и все последние несколько писем схвачены (Итак, если #endofscript не отображается, он все равно стирает текст). Как я могу применить метод в скрипте? Тем более, что мой контент доставлен/схвачен. Кроме того, содержимое, которое я получаю/захватываю, является одной строкой, поэтому первый вариант не может быть использован. Еще раз, я ценю ваш ответ. :) – AUllah1

+0

вы могли бы проверить, есть ли (subst homepage ($ homepage, -12) == '#endofscript'), прежде чем использовать substr для его удаления, может быть быстрее, чем регулярное выражение. Кроме этого, просто используйте строку preg_replace со вторым выражением, где $ dat - ваша домашняя страница $. :-) – Kuchen

+0

Эй, Кучен, снова спасибо за ответ. Мне нравится идея проверки перед использованием функции substr, но как добавить эту функцию в свой скрипт? Я попытался это сделать, но потерпел неудачу, извините, я все еще изучаю пару вещей, когда я иду. И используя preg_replace, как я могу это использовать? Добавив его в скрипт, я добавил «echo $ res;» который, похоже, не сделал этого трюка, он по-прежнему отображал текст «#endofscript». Спасибо за ваш ответ. :) – AUllah1

1

Так вы говорите, что это плохой текст может добавить к выходу, вы могли бы использовать что-то вроде этого кода (обернуть его в функция для более простого кодирования):

<?php 
define("bad_text", "#endofscript"); 

$feed_text = "here is some text#endofscript"; 
$bExist = false; 
if(strlen($feed_text) >= constant("bad_text")) 
{ 
    $end_of_text = substr($feed_text, strlen($feed_text) - strlen(constant("bad_text"))); 
    $bExist = strcmp($end_of_text, constant("bad_text")) == 0; 
} 

if($bExist) 
    $final_text = substr($feed_text, 0, strlen($feed_text) - strlen(constant("bad_text"))); 
else 
    $final_text = $feed_text; 

echo $final_text; 
?> 
+0

Привет, Пони, я очень благодарен за ваш ответ и думаю, что ваше кодирование довольно увлекательно. Тем не менее, контент, который я использую, захватывается/извлекается, поэтому я не думаю, что этот код будет работать для него, поскольку я попытался применить на нем захваченный контент. Как вы думаете, для этого есть работа, или я просто делаю это неправильно? Спасибо за ваш ответ и время. :) – AUllah1

+0

Спасибо за приятную обратную связь! Что вы подразумеваете под «схваченным/взятым»? И вы сказали, что фид - это текст, или он бинарный? .. и, именно так вы знаете - каждый раз в приведенном выше коде, который мы называем strlen(), мы теряем процессорные циклы - вам лучше позвонить его один раз и поместить в «$ feed_len» ... просто быструю оптимизацию. – Poni

+0

Благодарим за отзыв, это очень ценно. :) Когда я заявляю «схваченный/взятый», я имею в виду, что текст был перенесен на мой веб-сайт с помощью «file_get_contents» (функция php) и что текст не вводится вручную. Хотя текст по-прежнему является текстовым, а не двоичным. После использования «file_get_contents» для получения текста ваш php-скрипт, похоже, не удаляет текст «#endofscript», который вызывается. Еще раз спасибо за ваши усилия и ваш ответ! :) – AUllah1

 Смежные вопросы

  • Нет связанных вопросов^_^