Информация о пользователе

Ник: Kirill
Страна: Украина
Статус: Активен
С нами с:
06.02.2017 21:27
Лайки
Лайки: +115
Лайки
+137
Дизлайки
-22
Я лайкал: +46
Я лайкал
+48
Я дизлайкал
-2
Комментарии
Комментировал: 144
Посты
11
Комментарии
133
Ответы: 156
Посты
94
Комментарии
62
Пару слов о судебной системе Украины. Реальный опыт. Часть 1.
Oborotenby писал(а):
Ссылку бы на вторую часть
К сожалению, так и не написал. Все собирался, но не дошли руки. Хотя планирую.
Успехи и неудачи при создании своего проекта (стартапа).
ewgenm писал(а):
Можешь по по подробнее, про проект о недвижимости?
Написал вторую часть: https://cleverman.org/post/pochemu-ne-vzletel-portal-nedvizhimosti-chast-2
Laravel 5.5 и slug. Что такое слаги и зачем они нужны.
alik писал(а):
Здравствуйте Кирилл! Со слагами все получилось.Спасибо. Слаги генерируются, но почему то на латинице хотя в поле источнике идет кириллица. Например в источнике - 'Продтовары' -а в поле slug- prodtovary(при этом в источнике с Большой буквы -'П' , а генерируется в слагах с маленькой- 'p'). Если есть возможность подскажите как сделать чтобы слаги формировались один к одному, хотя бы по графике)
Здравствуйте. Все правильно. Согласно правилам SEO слаги должны быть только на латинице и только в нижнем регистре. Кириллица очень плохо для СЕО, а заглавные буквы в урлах вообще плохая идея. И согласно лучшим рекомендациям, пакет все приводит к транслитерации и нижнему регистру.

Если же вы решили все таки делать слаги на кириллице, то тогда это можно делать и без пакета. Для этого нужно вырезать все служебные символы из заголовка и заменить пробелы знаком дефиса.
Успехи и неудачи при создании своего проекта (стартапа).
Вот, написал первую часть статейки по проекту. Двумя словами тут не объяснить обо всех нюансах и трудностях: https://cleverman.org/post/pochemu-ne-vzletel-portal-nedvizhimosti
Laravel 5.5 и парсинг. Что такое краулер (crawler).
Да, кстати, для интересующихся моей реализацией. За точку входа я всегда брал страницу, где появляются свежие посты. Это может быть блок, а может быть страница. Так вот, через какое-то время на этой странице должны появляться новые посты. Парсер у меня настроен был (можно самому настроить) так, чтобы не заходить подряд на тот же сайт. То есть, если у меня для парсинга было указано 30 сайтов, а сегодня я парсил первый, то возвращался к первому я только тогда, когда пропарщу остальные 29. Плюс я веду лог спарщенных данных, самое простое - это проверка по url поста. Если я уже забирал от туда данные, то просто пропускаю такой урл.

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

Может, если я найду время, то выложу исходники и подробно расскажу, как это все работает. Кстати, у меня разработка идет на локальном компе, а парсинг на боевом сервере. И когда я для проверки набивал десятки сайтов с настройками на тестовом компе, то переносить это руками на боевой - еще тот адов трэш. Поэтому я дополнительно написал систему экспорта импорта данных в один клик.
Успехи и неудачи при создании своего проекта (стартапа).
Слушай, я тут подумал и решил, что в рамкам комментария мой рассказ не уложится и решил написать статейку. Прямо сейчас сяду писать и через пару часов будет готова.
Успехи и неудачи при создании своего проекта (стартапа).
ewgenm писал(а):
Можешь по по подробнее, про проект о недвижимости? В моём городе, есть конкурент, но он готов продаться одному из крупных агентств. Ниша будет свободна (какое то время)
Да, завтра напишу в комменте.
Laravel 5.5 и парсинг. Что такое краулер (crawler).
darkkkk писал(а):
Ответ на комментарий Как вы получаете идентификатор поста? В примере вижу использование палочек | что-то вроде a|p?= или a|archives/{d}. Это фишка краулера или ваша реализация? Если ваша реализация, то не могли бы вы подсказать, как сделать также?
Я использовал свои модификаторы. Писал функционал давно, уже точно не помню, что и как я делал. Но глянул код, все достаточно просто. Вот мой метод, который получает ссылки для парсинга и считывает модификаторы:
/**
* Get links for posts.
*
* @param $parser object collection with parsing settings
* @return array with links
*/
public function getLinks($parser)
{
// Create empty array for links.
$links = [];

// Get html remote text.
$html = file_get_contents($parser->parsing_site);

// Create new instance for parser.
$crawler = new Crawler($html, $parser->parsing_site);

// Check exist additional condition.
if (strpos($parser->settings->link, '|')) {
// Get link conditions.
list($linkCondition, $stringInUrl) = explode('|', $parser->settings->link);
} else {
$linkCondition = $parser->settings->link;
$stringInUrl = '';
$condition = false;
}


// If exist string URL condition.
if (!empty($stringInUrl)) {

// If exist only numbers condition.
if (strpos($stringInUrl, '{d}')) {
$stringInUrl = str_replace('{d}', '', $stringInUrl);
$condition = true;
}
}

// Get links from mail link page.
$crawler->filter($linkCondition)->each(function (Crawler $node, $i) use (&$links, $parser, $stringInUrl, $condition) {
$link = $node->link()->getUri();

// If no condition for exist string in URL.
if (empty($stringInUrl) && $this->checkLink($link)) {
$links[$link] = $link;
}

// If exist condition for exist string in URL.
if (!empty($stringInUrl) && strpos($link, $stringInUrl) !== false) {
// If not number condition.
if (!$condition && $this->checkLink($link)) {
$links[$link] = $link;
}

// If exist number condition.
if ($condition) {
// Get data after condition string.
$linkData = explode('/', substr($link, strpos($link, $stringInUrl), strlen($link)));

if (is_numeric($linkData[1]) && $this->checkLink($link)) {
$links[$link] = $link;
}
}
}
});

// Check count entries.
if (count($links) > $parser->settings->count) {
$i = 1;
// Delete part entries.
foreach ($links as $key => $value) {
if ($i > $parser->settings->count) {
unset($links[$key]);
}
$i++;
}
}

return $links;
}
Laravel 5.5 и slug. Что такое слаги и зачем они нужны.
alik писал(а):
Или задам вопрос по другому: - слово 'source' в данном конкретном случае не является спец словом определенным внутри самого фреймворка для слагов?
Это слово является служебным и должно использоваться, как указано в документации. Так как при работе пакета со слагами он будет получать данные из ассоциативного массива, где ожидает по ключу source увидеть поле из которого должен сформироваться слаг.
Laravel 5.5 и slug. Что такое слаги и зачем они нужны.
alik писал(а):
Здравтвуйте У Вас есть блок - public function sluggable() { return [ 'slug' => [ 'source' => 'title' ] ]; помогите разобраться что это за 'source' и как он согласуется с остальным кодом, Заранее спасибо. и если ответите ответ те пожалуйста на самом сайте. Заранее спасибо
Поскольку для работы со слагами мы используем готовый пакет https://github.com/cviebrock/eloquent-sluggable То и создание слага происходит согласно документации этого пакета (раздел

Updating your Eloquent Models).

Суть такова, что мы подключаем в классе модели трэит Sluggable:

use Sluggable;

в котором описан абстрактный метод sluggable() который должен вернуть массив. Поскольку метод абстрактный:

/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
abstract public function sluggable(): array;

то мы не можем его заюзать напрямую, а обязаны переопределить (реализовать). Таким образом достигается автоматическая генерация слага и запись его в базу (благодаря логике пакета).

Теперь непосредственно о самом массиве. Запись вида:

[
  'slug' =>
[
'source' => 'title' ] ]

говорит нам, что мы создаем в нашей таблице модели запись для поля slug, которое должно быть сформировано из источника source, которым в нашем примере является поле title

При сохранении модели с полем title="Привет мир" будет сформирован слаг (название поля в таблице/модели slug) из этого поля ('source' => 'title'): privet-mir

Надеюсь, я прояснил для вас этот момент. Если не поняли, то спрашивайте. Попробую объяснить по другому.