Здравствуйте, столкнулся с такой задачей: в Базе данных в таблице "Monitoring" есть поле "one_url" в котором хранятся ссылки, надо получить массив этих ссылок, обойти каждую ссылку (из таблицы one_url) и сохранить значение в поле "one_price". База данных: https://prnt.sc/hykh7m
Пытаюсь обойти с помощью Simple HTML DOM Parser массив ссылок чтобы получить значение.
Работаю с Yii2, вот пример моего кода:
class CurlController extends Controller
{
public function actionIndex(){
$base = new Monitoring(); //Обьявляем подключение к базе
$base2 = Monitoring::find()->all(); //Получаем значения из базы данных
//Делаем перебор массива ссылок
foreach ($base2 as $one_url){
echo "<pre>";
print $one_url->url_test;
}
$url = $one_url->url_test; //Передаем значение ссылок в переменную
/**
* GetMultiContent->init($url) инициализирует парсер, принимает два параметра:
* $url type string - ссылки парсируемых сайтов, если передать массив отработает мультизагрузчик
* если строку отработает обычный загрузчик
* $no_parser type boolean - true, не создавать объект Simple_html_dom контент для обработки контента
* и вернет строку, false, создасть объект автоматически (по умолчанию false)
*/
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $url)
echo $element->plaintext . "\n";
}
}
Делаю все на Yii2, не могу передать в поле $url = $one_url->url_test; - ссылку, подскажите как это сделать пожалуйста, всю голову уже сломал гуглить и как потом каждое значение сохранить в таблицу?
У вас строка $url = $one_url->url_test; //Передаем значение ссылок в переменную
находится вне цикла foreach, $one_url->url_test
существует только внутри цикла. Кроме того у Вас есть еще ошибки. Во-первых,
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $url)
echo $element->plaintext . "\n";
тоже находится вне цикла. Во-вторых, если перенести этот код в первый цикл foreach, то будет ошибка 2ого цикла из-за того, что вы используете as $url
хотя $url уже выполняет другую роль, в-третьих вы вызываете $element->plaintext
- хотя такого объекта не существует.
Для того, чтобы потом занести значение в таблицу, вам нужно вызвать соответствующую сущность, передать ей нужные значение и использовать метод save()
Переделанный примерный код выглядет примерно так:
class CurlController extends Controller
{
public function actionIndex(){
$base = new Monitoring(); //Обьявляем подключение к базе
$base2 = Monitoring::find()->all(); //Получаем значения из базы данных
$model = new Model(); // та сущность, куда будет вносить данные (это отдельный класс, который расширяет ActiveRecord)
//Делаем перебор массива ссылок
foreach ($base2 as $one_url){
echo "<pre>";
print $one_url->url_test;
$url = $one_url->url_test; //Передаем значение ссылок в переменную
/**
* GetMultiContent->init($url) инициализирует парсер, принимает два параметра:
* $url type string - ссылки парсируемых сайтов, если передать массив отработает мультизагрузчик
* если строку отработает обычный загрузчик
* $no_parser type boolean - true, не создавать объект Simple_html_dom контент для обработки контента
* и вернет строку, false, создасть объект автоматически (по умолчанию false)
*/
$html = Yii::$app->multiparser->init($url);
//Обходим массив ссылок и получаем значение селектора
foreach($html->find('.pr-price_cash') as $element) {
echo $element->plaintext . "\n";
$model->text = $element->plaintext;
$model->save();
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня на сервере не работал код, я засунул его в компиляторКомпилятор говорит что надо убрать точку с запятой вот тут: $file = 'Data/Users/'
например в кабинете пользователя формируется реферальная ссылка mysiteru/?ref=13 если пользователь перешел по этой ссылке на сайт, как записать...