Сообщество - Программирование на PHP
Добавить пост

Программирование на PHP

49 постов 1 714 подписчиков
21

Почему мы не любим Legacy?

Всем ку! Не так давно я задался вопросом, а почему мне нравится такая нудная работа? На самом деле, ответ кроется не на поверхности. Чтобы понять всю суть любви к программированию, нужно копнуть немного глубже, нежели просто придерживаясь тех фактов, что у программистов высокая заработная плата (хотя, по секрету, это не совсем так).

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

Многим разработчикам действительно нравится создавать нечто новое, решать сложные и необычные задачи, однако, на практике, все выходит совершенно обратно. Чаще всего задачи скучные и однотипные, а работать приходится не с неизведанным и новым, а с устаревшим и скудным.

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

И ведь действительно, большинство наработок, используемых в бизнес-проектах, уже достаточно стары (возьмем банальные Java 8, PHP 3 или 5, C++7). Почему же так происходит? Все дело в том, что бизнесу не нужны новомодные решения (если речь не о стартапах) - бизнесу нужна стабильность, чтобы она стабильно приносила деньги с минимальными затратами, то есть для бизнеса лучше написанная система 2003 года, зато стабильная. Когда речь доходит до обновления какой-либо системы или сервиса с legacy-кодом, то процесс затягивается надолго, ибо бизнес начинает просчитывать риски, бюджет, время. Нельзя обновить систему так, чтобы она приносила убытки - это, как минимум, глупо.

В программировании достаточно часто встречаются такие проекты-динозавры, которые придерживаются принципа "работает - не трогай". И, чаще всего, джун, изучающий самые новые технологии, после успешно пройденного собеседования, сильно огорчачется, ведь ему приходится перелопачивать код, который в последний раз до него трогал только дед Василий в 1998 году, не закончивший пару фич из-за наступления маразма. И вот паренек (или девушка) трогает код динозавров с функциональным стилем, на старой CRM alpha-версии, используя при этом технологии, которые джун не изучал, ведь... он думал, что сфера ИТ никогда не стоит на месте, а шутки про legacy всегда были смешными, но смешно все, пока с этим не столкнешься.

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

Сфера IT действительно не стоит на месте, сервисы обновляются чуть ли не каждый день, каждый день появляется новый фреймворк, обновление для языка и т.д., но все забывают главное - бизнес должен быть стабильным. Просто крупным компаниям совершенно невыгодно переписывать базу, да и зачем, если это просто займет время и толком ничего не изменит (лишь на 0.0003 мс быстрее станет). Legacy делаются с упором на то, что никто и никогда не будет в него лезть, код должен быть максимально непонятным, держащимся на костылях и goto.

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

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

Показать полностью 4
8

Скрипт для веб камер с RTSP

Мой первый пост, готов принять критику.

Скрипт позволяет сохранять видео с камер поддерживающих RTSP.

- Имеется удобное добавление, редактирование камер в систему.

- Имеется возможность добавления фильтров для обработки видео.

- Анализ видео на наличие звуков, удаление видео с "тишиной"

- Установка времени работы камер(запись только тогда когда необходимо)

- Анализ видео на наличие разговоров и получение текстовой версии.

Скрипт для веб камер с RTSP PHP, Вебкамера, Web-Программирование, Длиннопост

Список всех камер, для камеры указывается ссылка RTSP и параметры для ffmpeg (чтобы сохранять поток в видео файл) Каждую камеру можно запустить и остановить отдельно, также указать время работы.

Скрипт для веб камер с RTSP PHP, Вебкамера, Web-Программирование, Длиннопост

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

Скрипт для веб камер с RTSP PHP, Вебкамера, Web-Программирование, Длиннопост

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

Реализованы автоматические скрипты для обработки видео(удаление видео с тишиной или без движения), видео с текстом или помеченные отправляются в Telegram чат.

Скрипт для веб камер с RTSP PHP, Вебкамера, Web-Программирование, Длиннопост

Для минусов укажу комментарий, спасибо если дадите публиковаться.

Дубликатов не найдено, выдает скрины каких то приложений.

Показать полностью 3
6

Работа разработчиком в ИП

Всем ку! Буквально недавно я устроился веб-разработчиком на PHP в одно местное ИП (если считать по Москве). В общем, работка не пыльная - сидишь в офисе и делаешь сайты на заказ, а также занимаешься их поддержкой. Если так подумать, то что еще нужно для счастья? Думаю, что потребовалось неплохо оплачивать ту часть работы, которую я опишу ниже.

Работа разработчиком в ИП PHP, Программирование, Разработка, ИП, Сайт, Создание сайта, Длиннопост

Все наши ребята занимаются не только разработкой и/или поддержкой сайтов, хотя именно "PHP-разработчик" вписан над графой "Должность", они охватывают больший спектр задач, чем могли себе представить изначально. То есть приходит PHP-разработчик и говорит HR'у: "хочу у вас работать на должности PHP-программист, заниматься созданием бекенда сайтов с нуля или, максимум, с использованием какого-либо движка для упрощения задачи себе и ускорения выполнения задачи для заказчика", в ответ же юнец слышит, что все будет именно так, что именно такой разработчик, выполняющий именно такие задачи, им и нужен. Зеленого принимают, неделька на вливание в коллектив, распределение задач, осознание происходящего.

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

Работа разработчиком в ИП PHP, Программирование, Разработка, ИП, Сайт, Создание сайта, Длиннопост

На только вышедшего из фазы "новичок" разработчика перекладываются все задачи, которые только прилетают от заказчиков, пропуская фильтрацию от менеджера(ов), ведь, обычно, менеджеры разбираются в рабочей сфере лишь поверхностно, что является одной из основных причин появления странных, порой почти невыполнимых задач, которые бедолага должен выполнить в настолько короткий срок, что сон становится чем-то из разряда поощерения.

Оплата труда неспящего разработчика, на которого накидывают все больше и больше задач, в какой-то момент перестает иметь ценность, ведь на первом месте у человека, стучащего по клавиатуре, становится выживание — никакие деньги не смогут вернуть потраченное на разработку время.

Заработная плата работника также странно формируется — деньги за выполненные задачи, однако бывают задачи, которые можно выполнять месяцами и что же, сидеть без денег все это время? Нет, конечно! Задачи будут кидать и кидать... Без остановки. Когда у разработчика уже более 50 различных задач, каждая из которых "срочная", то абсолютно размываются какие-либо границы "когда это закончится". Задач становится все больше, времени все меньше, заказчики подгоняют, но у разработчика упал сервер, который в срочном порядке нужно поднять...

Работа разработчиком в ИП PHP, Программирование, Разработка, ИП, Сайт, Создание сайта, Длиннопост

Вот и получается, что на одного разработчика приходится очень много задач, плюс настройка всего, что только может существовать в мире, потому что "нада", а заказчики продолжают ждать выполнение поставленных задач от команды разработчиков.

Каждый работник ИП, устроившись программистом, выполняет роли всех работников, то есть разработчику могут спокойно сказать "иди пиши статью", а сделать он ничего не сможет — штата не хватает, а организация выполнения задач хромает на своих трех сломанных ножках.

В ИП сложно работать, а с ИП трудно иметь дело.

Показать полностью 3
71

Как в PhpStorm убрать лого при каждой загрузке

Сижу программирую. Вылазит сообщение - PhpStorm обновился. Обновляю

Как в PhpStorm убрать лого при каждой загрузке PHP, Программирование, Web-Программирование

При каждом входе вижу вот такое цветастое лого - бесит.

Написал в поддержку, получил ответ:

Как в PhpStorm убрать лого при каждой загрузке PHP, Программирование, Web-Программирование

Текстом: Откройте Help -> Edit Custom VM Options... -> и добавьте -Dnosplash=true строку. После этого логотип больше не будет показываться.

Показать полностью 1
4385

Про взлом сайта

Вспомнил историю, хочу поделиться. Может кому то интересно, что значит "взлом сайта" и как это делают.

Был у меня малюсенький сайт в годах примерно 2010-2014. Сайт - интернет магазин, где я продавал свои же php скрипты и давал возможность любому продавать на нём свои скрипты и брал за это 10%. Сайт был не прибыльным, но и содержание его мне ни чего не стоило. И написал я его полностью сам, совершенствуя навык программирования. Был этот сайт полностью автоматизирован.. Т.е. пополнение баланса через webmoney, покупка, продажа, вывод денег, оповещения о продажах по смс... Всё проходило автоматически и без моего участия. К сайту был привязан кошелек, на котором лежало около 3000р.

Однажды мне позвонил какой-то паренек.. 17 лет ему было. И представился как человек, взломавший мой сайт.

И действительно, парень вывел на свой кошелек все деньги с кошелька сайта. Он их мне вернул и рассказал про уязвимость.

А уязвимость просто наитупейшая... Немного об алгоритме программы: при покупке какого-то товара, программа проверяла, если на счету покупателя денег больше чем цена товара, то из его счета вычиталась эта сумма и отдавался товар. Так вот. В программе при добавлении товара на сайт я не сделал проверку на отрицательную цену. Чувак просто добавил товар с отрицательной ценой, допустим -500р. Потом с другого аккаунта стал покупать свой же товар. Программа проверила, что на его нулевом счету денег больше, чем -500 и вычла из нуля минус пятьсот... Минус на минус дало плюс и его счет увеличился на 500р при покупке товара. Потом он заказал вывод средств и программа в автоматическом режиме перевела деньги на его кошелек.

К тому времени я уже забросил этот сайт.. Больше года им не занимался, и решил просто отдать его тому парню... Он согласился, но видимо ему сайт быстро надоел и уже через пару месяцев он перестал существовать.

Показать полностью
1123

Дельный совет в книге по PHP

Дельный совет в книге по PHP
243

Бесплатная книга «Заметки по PHP»

У меня есть сайт, где я публикую свои заметки по программированию. Решил попробовать сделать раздел по PHP в виде книги (формат PDF). В итоге по объёму получилось 72 страницы.


Все статьи уникальны, т.е. написаны мною.


Скачать книгу можно по этой ссылке: https://yadi.sk/i/aSudVcy-3KucBN

26

Как подружить Ежа с Ужом или отправить с сайта заявку в 1С

Наступил час Х, директор вызвал меня и объявил, что хочет, что бы заказы с сайта падали в 1С. Деваться некуда пришлось браться за столь весёлую и увлекательную задачу. Так как 1С я видел только из далека на компьютере главного бухгалтера, первая моя мысль была поймать нашего 1С-ника работающего на удалёнке и объяснить ему задачу. Поймал, объяснил, что хочу мол в 1С POST запросы отправлять для формирования заявки. 1Сник очень удивился, сказал: "Моя твоя не понимать", но обещал подумать. Через пару часов позвонил и сказал, что в 1С есть уже готовая система для приёма заявок с сайта. Но как она работает он не знает, так что разбирайся сам. Приехали.


Что делать, пришлось сесть и читать про CommerceML 2. При первом знакомстве с документацией на сайте 1С, чтение сего мануала вызывало боль, отвращение и мысли о суициде. Такой охуенной документации я давно не читал. После первого прочтения решил позвонить в одну известную в нашем городе 1С контору и спросить, сколько будет стоить сопряжение нашего сайта с 1С, менеджеры долго совещались и через сутки вынесли вердикт 30 000 рублей.


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


Первое, что было необходимо сделать это поднять web сервер на сервере 1С и настроить 1С-ку что бы она общалась через этот web сервер, надо отдать должное описание сего процесса есть на многих сайтах и форумах и занимает не более получаса.


А что дальше? Проверяем как работает веб сервер и отправляем ему запрос в браузере:


http://xxx.xxx.xxx.xxx/'Имя сервиса'/ws/SiteExchange?wsdl


Получаем XML-ную партянку, охуеваем и от количества параметров. Где наша не пропадала? Лезем читать мануалы и тут нас ждёт горькое разочарование. Нет никакой информации, какие параметры обязательны для отправления, как будет привязываться товар  к справочнику номеклатуры. Как это всё работает в целом?


Попытки отправить XML запрос вызывали ошибки на стороне 1С, она ругалась не понятными словами. А дальше пару дней я просто читал всё что связанно с оформлением заявок с сайта в 1С.


Ничего дельного я не нашёл. Но пару раз меня выкидывало на форум 1С, но там нужна была регистрация, а регистрироваться в этой богадельне мне не хотелось, но на конец второго дня я понял, что видимо придётся. Регистрация давалась на 7 дней, если ты не являешься клиентом ))).


Регистрация пройдена и о чудо в одной из веток я обнаружил обсуждение данного вопроса и там то я и подсмотрел как правильно формировать XML запрос.


Выкладываю его сюда может ещё кому пригодится:


function Connect1C(){

if (!function_exists('is_soap_fault')){

print 'Не настроен web сервер. Не найден модуль php-soap.';

return false;

}

try {

$client1C = new SoapClient('http://xxx.xxx.xxx.xxx/'Имя веб-сервиса'/ws/SiteExchange?wsdl',

array('login' => 'woodman02',

'password' => 'password',

'soap_version' => SOAP_1_2,

'cache_wsdl' => WSDL_CACHE_NONE, //WSDL_CACHE_MEMORY, //, WSDL_CACHE_NONE, WSDL_CACHE_DISK or WSDL_CACHE_BOTH

'exceptions' => true,

'trace' => 1));

}catch(SoapFault $e) {

trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR);

}

if (is_soap_fault($client1C)){

trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR);

return false;

}

return client1C;

}

function GetData($idc, $param){

if (is_object($idc)){

try {

$ret1c = $idc->LoadOrders($param);

} catch (SoapFault $e) {

echo "Ошибка</br>";

var_dump($e);

var_dump($ret1c);

}

}

else{

echo 'Не удалось подключиться к 1С<br>';

}

return $ret1c;

}

$OrdersData = Array(

"ВерсияСхемы" => "2.05",

"ДатаФормирования" => "2020-05-29T11:56:10",

"Документ" => Array(

"Ид" => null,

"Номер" => null,

"Дата" => "2020-05-29",

"ХозОперация" => "ЗаказНаПродажу",

"Валюта" => "руб",

"Курс" => "1",

"Сумма" => "6945",

"Контрагенты" => Array(

"Контрагент" => Array(

"Ид" => null,

"Наименование" => "Иванов",

"ПолноеНаименование" => "Иван",

"Роль" => "Покупатели",

"Адрес" => Array(

"Представление" => "Тест",

"Комментарий" => "Тест"

)

)

),

"Время" => "15:30:15",

"СрокПлатежа" => "0001-01-01",

"Комментарий" => "Заказ с сайта",

"Налоги" => Array(

"Налог" => Array(

"Наименование" => "НДС",

"УчтеноВСумме" => "false",

"Сумма" => "0"

)

),

"Товары" => Array(

"Товар" => Array(

"Ид" => null,

"Артикул" => null,

"Наименование" => "Грабля электронная",

"БазоваяЕдиница" => Array(

"Код" => "796",

"НаименованиеПолное" => "Штука",

"МеждународноеСокращение" => "PCE"

),

"СтавкиНалогов" => Array(

"СтавкаНалога" => Array(

"Наименование" => "НДС",

"Ставка" => "0",

)

),

"ЗначенияРеквизитов" => Array

(

"ЗначениеРеквизита" => Array

(

"0" => Array

(

"Наименование" => "ВидНоменклатуры",

"Значение" => "Товар"

),

"1" => Array

(

"Наименование" => "ТипНоменклатуры",

"Значение" => "Запас"

)

)

),

"ЦенаЗаЕдиницу" => "6945",

"Количество" => "1",

"Резерв" => "1",

"Сумма" => "6945",

"Единица" => "шт",

"Коэффициент" => "1"

)

),

"ЗначенияРеквизитов" => Array

(

"ЗначениеРеквизита" => Array

(

"0" => Array

(

"Наименование" => "Организация",

"Значение" => "ИП Чоршамбе Нет Отчества"

),

"1" => Array

(

"Наименование" => "Вид цен",

"Значение" => "1-2 Единая оптовая"

),

"2" => Array

(

"Наименование" => "Склад",

"Значение" => "Склад №1 для торговли"

),

"4" => Array

(

"Наименование" => "Дата отгрузки",

"Значение" => "2020-05-29"

),

"5" => Array

(

"Наименование" => "Статус заказа",

"Значение" => "Подготовка КП"

),

)

),

)

);

$params = Array();

$params["OrdersData"] = $OrdersData;

// Загружаем заказ с сайта.

//$result = $client->LoadOrders($params);

$idc = Connect1C();

$ret1c = GetData($idc,$params);

var_dump($ret1c->return);


Сразу отвечу на один вопрос, который занимал меня. Как 1С будет привязывать к своей номенклатуре мою заявку. Это потрясающее решение от компании 1С, мне такое даже в голову не могло прийти. При получении заявки 1С смотрит по названию (по названию Карл!??, не по Id, не по штрихкоду, а по названию) есть у неё в номенклатуре такой товар или нет, если нет, она тупо его создаёт, 1С-ники умеют поражать. Так что будьте внимательны названия в заявке должно строго соответствовать названию в 1С, иначе наплодите товаров в номенклатуре.


Ура! Пол дела было сделано. Далее я настроил проброс портов на нашем Mikrotik-е, что бы к 1С серверу можно было обратиться только с IP адреса Web-сервера и определенного порта (не скажу какого).


Дописал скрипты и вот наш интернет магазин сделанный на Joomla + Seblod отправляет заявки в 1С. Всё теперь я то же могу брать 30 т.р. за подключение сайт к 1С ))))

Показать полностью
27

Хитрый Сергей)

Хитрый Сергей)
15

Техническая часть и особенности разработки мониторинга цен

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

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


Конечно же сервис (я ранее о нём писал ТУТ) сильно изменился и действительно стал удобнее, я также отслеживаю на нём некоторые приложения — стало информативнее. Но всё же я стараюсь не забывать, что не бывает всё идеально! Понимаю, что еще много всего можно доработать, поэтому будем улучшать и делать информацию еще более полезной! Многие доработки на основе обратной связи я уже внёс, но разумеется будут еще! Итак, начнём наше слишкоммногобукаф =)


Получение информации и приложениях


Изначально при создании такого типа сайта нужно понимать откуда дергать информацию. По сути есть два способа, это прямой парс сайтов, либо использование XML / JSON. В данном случае парс просто "грабит" информацию с сайтов источников, XML / JSON даёт структурированные данные, которые мы обрабатываем на своей стороне.


— Парс: целая куча граблей в корректности информации, если источник изменил верстку — то сервис перестаёт работать и получать нужные данные, либо начинает "мусорить". Подобное уже случалось с Google Play Market, когда те обновили верстку и много информации попросту потерялось при получении данных о приложении.

— XML / JSON: эти данные имеют свою четкую структуру данных, которую мы принимаем на своей стороне и обрабатываем, то есть со временем у нас не пропадёт информация и поля с данными никуда не уедут.


В данном случае надёжным будет XML / JSON, т.к. точность данных не нарушается со временем в результате каких-то обновлений, исключением скорее может быть нерабочий сервис источника. В целом разработчики эти особенности знают.


Ок, откуда получать информацию о приложениях?


— Google Play Маркет (не даёт никаких API, тут нужен скрипт парсинга и никак иначе)

— AppStore (даёт RSS XML либо RSS / JSON)

— PS Store (даёт API JSON)

— Microsoft Store / Xbox Live Store (не даёт официального api, но есть сервис xboxapi.com, к сожалению платный)

— Steam (даёт API JSON)


// Appstore API
$url = file_get_contents('http://itunes.apple.com/lookup?id=XXXXXXX&country=ru');
$data = json_decode($url);
$data = $data->results[0];

// Выводим всю информацию о приложении, которую отдаёт нам Apple
print_r($data);

// Название

$name = $data->trackName;

// Описание

$description = $data->description;

// Категория

$category = $data->primaryGenreName;

...

Данный отрывок кода — стандартное получение данных API из JSON AppStore, далее подставляем нужный ID, обрабатываем через PHP и погнали. Аналогично по данному типу работают все приложения, мы просто подставляем ID и запрашиваем свежую информацию о приложении. Сервис AppStore и, в нашем случае Google Play, не предоставляют информацию о скидках, они пишут только актуальную цену и всё, поэтому её мы пишем в базу, запоминаем и сравниваем с периодичным обновлением по крону. Способ не самый изящный, но другого в принципе нет. Разве что можно писать не в базу, а в файлы, но где хранить информацию это скорее вопрос оптимизации скрипта и данных. В других сервисах аналогично, за исключением Play Market-a.


Остальные сервисы по аналогии, ставим на Cron и обновляем каждые 1-2 часа для поддержания актуальности данных. И вот мы потратили много времени и подготовили все скрипты по подгрузке и обновлению данных. Теперь мы вынуждены столкнуться с некоторыми нюансиками этого проекта, о чём и пойдёт речь далее.


Без нюансов? Нет, не слышал!


Для расширения функционала сервиса и улучшения его качества появляются те самые нюансы, которые приносят расходы:


— домен и хостинг (это обязательная часть сайта — без них никуда. Т.к. проект работает с большим объёмом информации, то обычный дешевый хостинг не пойдёт, а это уже от 300 руб./мес., но я не сторонник хостингов и поэтому проект ушёл на вдс, т.к. хостеры часто любят ограничивать нас выделенной памятью, временем выполнения скрипта, отключать директиву allow_url_open и еще целая куча косяков и приколов в зависимости от хостера)

— xbox api — является платным (аналоги я искал долго и упорно — ничего нет). Бесплатный тариф имеет ограничения (60 запросов в час), которые быстро будут исчерпаны при заполнении раздела приложениями.

— SMS уведомления для тех, кто не читает почту и воспринимает её как сборник спама. Чтобы это полноценно работало и точно приходили оповещения (а не через раз), пришлось воспользоваться сервисом смс. ру и через него слать сообщения, которые оплачиваются в среднем от 3 до 7 руб. за шт в зависимости от условий и содержания сообщения.


То есть получается, что я стараюсь сделать проект, который будет полезен и поможет получить халяву, но при этом плюсуются обязательные расходы. Я даже не считаю личную занятость и затрачиваемое время, т.к. мне самому интересно и это моё хобби, хочется сделать полезный продукт несмотря ни на что, плюс я тоже им пользуюсь. Но вот расходы получается неотъемлемая часть проекта и в любом случае мне нужно их минимизировать, в результате чего мне пришлось ввести платный аккаунт с минимальной ценой (промо коды на полный акк я давал в самом первом посте) для компенсации расходов по самым минимальным подсчетам и вынужден немного ограничить рамки пользователей.


Рассмотрим эти расходы на примере грубых подсчетов


— Например, что сейчас на сайте 500+ пользователей, каждый из них может быть подписан на 30 приложений. Выходит 15000 уведомлений в день на готовности рассылки, из которых может быть 5% оповещений, а это 750 шт минимум. Даже если 10% пользователей будут пользоваться смс уведомлениями, это 75 смс уведомлений по средней цене 5 руб за штуку, так мы получаем 375 руб. в день расходов только на смс, а это 11+ тыс. рублей в месяц при самым грубым подсчетам!

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

Вот так вот, сделал доброе дело называется!


Бюджет Xbox Api более щедящий, просматривая тарифы я думаю вполне будет достаточно 400-1000 запросов в час за 2 фунта (189 руб) или 5 фунтов (473 руб) в месяц, чтобы это было с запасом, но это зависит напрямую от количества приложений на сайте, которое всегда пополняется.

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

Чтобы сервис работал и давал максимум функционала и минимум граблей — это не много. Не спорю можно сделать обычный парс и снизить эти расходы, но если вся конструкция развалится, то будет не очень хорошо.


По итогу выходит, что минимальные расходы ежемесячно на такой тип проекта могут быть примерно 12 т.р. в месяц по самым грубым подсчетам (144 000 руб в год). В общем как я уже писал, это всё крайне грубые подсчёты, прошу не ругать меня. Вообще логично, что такой сервис и вовсе должен быть фулл фри (ну или фулл картошека по деревенски).


Эти расходы не нужны, на основе отзывов пользователей вероятно потребуется исключать функционал с СМС, пусть все пользуются!


НЕСИТИ КОФИ! ГДЕ КОФИ!? Нужно больше информации!


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

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

Аналогичная ситуация с API / XML, если есть структурированные данные, то мы можем полноценно с ними работать. Но не все магазины их предоставляют, чаще это магазины с наличием партнерок. Подключаем доступные (Steam pay, steam buy, Бука). Теперь у нас есть сравнение цен.


Далее полным ходом идёт подбор магазинов, а это процесс сам по себе не быстрый. Кстати, магазины с партнёрками дают откаты проекту с продаж (но не все), то есть не наценку за товар, а именно откат, при котором магазин зарабатывает чуть меньше. В целом я думаю вполне корректно рассмотреть это как альтернативу компенсации финансов на обслуживание проекта, которую я думаю многие поддержат, ведь проект выходит в каком-то смысле на "самокоменсацию" за счёт подключаемых магазинов, а не пользователей. НО к сожалению их не много, поэтому на данный момент это не работает должным образом, остаётся лишь тестировать. Теперь, когда всё работает, подгружается, сравнение цен дополнило картину — я должен отметить, это действительно очень удобно. Нужно подключать вообще все на свете магазины больше магазинов!


Подключаю я значит сервис Plati, а там продавцы не имеют никакого регламента по заполнению названий и описания продуктов, в итоге мы имеем полный бардак в поиске и подборе названий товаров для сравнения. Я постарался обработать информацию как мог находя точные совпадения названий к товарам с учётом их обработки и удаления спецсимволов.

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

Кустарный способ обработки, т.к. символы дополнял и проводил определенные тесты, но уже переписал в массив и скорректировал код. Теперь мы перестали учитывать с обеих сторон всякие ТМ, Р и прочий мусор, который где-то есть, а где-то его нет. Информация о ценах стала подгружаться лучше, вроде работает. Теперь рассматриваю новые магазины, в обратную связь писали про Zaka-Zaka, но API они не предоставляют, к сожалению. Во многих местах там зацепиться не за что, а переходить на обычный парс HTML страниц не надёжно, хотя не всё же не исключаю такой ход для обеспечения функционала, написал определенную защиту и автоматически отключать показы в случае, если информация пошла некорректно.

Подведём итоги


Получается для создания подобного проекта (который совмещает в себе кучу разных магазинов и платформ, а также умеющий автоматом информировать) нужно не только выделить огромное количество своего времени помимо рабочих задач, учитывать интересы пользователя (это конечно в первую очередь, иначе все старания будут напрасны). Сколько себя знаю, занимаясь ковырянием в носу разработкой с примерно 2007 года (тогда я только начинал вникать во всё это и потихоньку изучать HTML) — я всегда мечтал построить что-то дельное, полезное и для людей! Теперь я понимаю, что такой проект я сделал и на основе отзывов можно сказать, что он действительно полезен, а поэтому — моя цель сделать еще лучше, еще интереснее и еще полезнее! Поэтому буду надеяться на Вашу помощь и поддержку, ведь поддержка в данном случае это и есть главная мотивация.


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


еще. Скажу так, терпения тоже нужно очень много, иногда ошибки появляются даже чисто случайно и приходится в срочном режиме всё исправлять, а в некоторых случаях на это может уйти много времени.


В общем, стараюсь для Вас как могу!


Credits:


Не сплю, не ем, работаю над проектом и заряжаюсь от сети:

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост

А это после очередного большого обновления:

Техническая часть и особенности разработки мониторинга цен PHP, Steam, Playstation, Appstore, Google Play, Xbox, Разработка, Длиннопост
Показать полностью 6
Мои подписки
Подписывайтесь на интересные вам теги, сообщества,
пользователей — и читайте свои любимые темы в этой ленте.
Чтобы добавить подписку, нужно авторизоваться.
Отличная работа, все прочитано!