SashkaOke

SashkaOke

на Пикабу
поставил 4 плюса и 0 минусов
проголосовал за 0 редактирований
сообщества:
3884 рейтинг 22 подписчика 85 комментариев 4 поста 2 в горячем
11

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

Техническая часть и особенности разработки мониторинга цен 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
525

Отчет по разработке сервиса для мониторинга цен и скидок

Отчет по разработке сервиса для мониторинга цен и скидок PHP, Мониторинг, Steam, Appstore, Playstation 4, Playstation store, Google Play, Xbox, Длиннопост

Всем доброго дня!

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


Что я доработал на основе поступивших предложений и замечаний:

1. Добавлена фильтрация в общем списке приложений: Только со скидкой, Временно бесплатные.
2. Обновлена карточка приложения / игры, теперь сразу пишется скидка и различные привилегии магазинов Steam, PS Store.
3. Также вывел плашку "Экономия", которая считает выгоду при наличии скидки.
4. Уведомления о старых скидках больше не отправляются новым пользователям;
5. Скорректировано визуальное оформление сайта для PC версии и мобильная верстка (в шапке, при регистрации, карточки превью, страницы самих приложений, страницу подписок);
6. Исправлены косяки при обновлении информации Steam и Xbox, из-за чего цены выводились неправильные, информация о совместимых устройствах была кривая, а также некорректно показывался жанр приложения и его распределение по категориям, что в последствии влияло на логику навигации.
7. Поправил работу графика мониторинга.
8. В навигации добавил иконки магазинов для того, чтобы легче ориентироваться
9. Похожие приложения выводятся в том же виде, что и остальные, а не в виде баннера (на странице игры/программы/приложения)
10. DLC к приложениям Steam теперь умеют подгружаться автоматически через некоторое время после добавления AppID.
11. Добавил кнопку на добавление приложений по AppID в видимые места и картинку для примера как добавить приложения, чтобы было более понятно где именно искать этот загадочный AppID
12. Прочие мелкие и незначительные доработки

По итогу структура сайта чуть изменилась, сначала идёт список всех приложений раздела (магазина), а уже потом отдельно их можно отфильтровать, например:


— Скидки Стим (обновляется каждые 2 часа): https://applook.ru/steam/skidki/

— Временно бесплатно в Steam: https://applook.ru/steam/vremenno-besplatnie/


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


Почему вроде как стала выгодной? Существуют фиктивные скидки!

Что это такое? Думаю многие и без меня всё поняли, но по сути это искусственное завышение цены перед днями больших распродаж (таких как черная пятница, кибер понедельник и прочие), когда разработчики / магазины по сути цены то и не меняли, зато создали видимость "вкусной цены".


Основная идея


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


Прошлым летом и осенью я сам активно мониторил цену на игру Crash Bandicoot в PS Store, периодично заходил и смотрел, потом снова, потом снова. Надоело, пару раз пропустил скидки и на этом было решено сделать такой проект, который в итоге:


1. Покажет на что есть скидки (или стало временно бесплатным — Халява)

2. Подскажет действительно ли это скидки или очередной ролтон на уши

3. Проинформирует об этом на почту или по смс (думаю добавить еще почтовых голубей и овлов из Гарри Поттера), т.к. у меня далеко не всегда есть время на то, чтобы мониторить эти магазины в ожидании скидок.


Все эти пункты сами собой говорят о том, что сервис должен быть один на все основные  интересующие меня магазины (по сути они самые популярные, я думал еще на счет Origin, но имел дело с ним один раз и то не для себя). И да, многие друзья действительно поддержали эту мысль! То есть один раз ткнул на то, что хотел бы получить дешевле или вообще бесплатно (если повезет), а оно тебе маякнуло само. Так и сделал сервис, а благодаря друзьям (в т.ч. из автоклубов) и конечно же пикабушникам — вносятся различные изменения направленные на улучшение и доработку полезности проекта, за что отдельное огромное спасибо.


Кстати для универсальности я и сделал сервис веб-приложением (PWA), то есть его можно установить на телефон (не важно андроид или яблоко), а также на ПК и периодично управлять подписками.


Основная цель


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


Заключение


На разработку ушло от 30 до 50 чашек кофе и чая, не вперемешку конечно же — но особенно штырило и плющило когда я на протяжении 5-6ти часов искал ошибку в скрипте, который получал информацию о приложении по API. Периодично помогала кошка, запрыгивала ко мне на стол и нажимала на клавиатуру :D Кстати говоря именно из-за неё я добавил loading.gif с бегающей кисулей при подгрузке приложений =)


На самом деле было тяжело, иногда вообще уже просто переставал соображать и не понимал, почему это не работает именно так, как должно работать, но я не привык бросать то, что начал и уперто шёл до победного! Еще раз всем спасибо за внимание и терпение к "многабукв". Вроде получается более рабочий продукт, но понимаю что он не идеален и буду признателен за конструктивные замечания, предложения и пожелания — что можно доработать, чтобы сделать сервис еще лучше и удобнее.


P.S. По части разработки если будет интересно — могу рассказать более детально включая технические моменты (код и работа с API), с какими сложностями я столкнулся и как их решил при реализации данного сервиса.


P.S.2 Пока писал пост — уже появилась одна идея на доработку, которая будет многим полезна в соц сетях, а также по экспорту информации куда-либо.


Всем хорошего дня!



Credits:

Это я в процессе разработки:

Отчет по разработке сервиса для мониторинга цен и скидок PHP, Мониторинг, Steam, Appstore, Playstation 4, Playstation store, Google Play, Xbox, Длиннопост

А это моя кошка, бегающая при загрузке страниц:

Отчет по разработке сервиса для мониторинга цен и скидок PHP, Мониторинг, Steam, Appstore, Playstation 4, Playstation store, Google Play, Xbox, Длиннопост
Показать полностью 2
-25

WEB-приложение мониторинга оф. скидок + промо коды

Решил поделиться полезным веб приложением для мониторинга официальных скидок, которые умеет отслеживать цены магазинов Steam, Appstore, Google Play, Playstation Store (psn), Xbox Live — и информировать об этом, притом не рассылать всякий спам, а именно оповещать о том, что меня интересует.


https://applook.ru/


Отрыл нужный контент (если не нашёл на сайте, то добавляется по APPID), нажал кнопку "сообщить о скидке" и вуаля. В один прекрасный день мне приходит на почту сообщение о том, что Dirt 4 в Playstation Store стоит 599 руб вместо 3499 руб!


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


На примере цены NFS Heat:

WEB-приложение мониторинга оф. скидок + промо коды Скидки, Playstation 4, Appstore, Google Play, Playstation, Xbox, Steam, Steam халява

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


Поделюсь промо кодом "Премиум аккаунт на 1 год" (он снимает ограничения с бесплатного акка и добавляет доп. возможности информирования). Код действителен до конца апреля 2020:

SFhu2tasREuAR

Также есть одноразовые коды 5 шт на 180 дн. премиум аккаунта. Не ограничиваются временем.


SXC72359fdsu
zXCI48f0UXhr
Kjt48Z665jdf
qw9Z8eritpfx
XCokt48df0do

Надеюсь оказался полезен ;)

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

Как Яндекс.Тахи заботится о клиентах

Недавно мне предстояла поездка из СПб в Москву, заранее мною был куплен билет на сапсан туда на 5:30 и через несколько дней обратно. Ехать до вокзала 15 минут, поэтому я вызвал такси за 40 минут и дальше профессионализм и ответственность "конторы" меня поразила.


1. Таксист еле ехал, проехал мимо меня и потом долго пытался сдать назад. Я сел в машину, тут таксисту приспичило протереть зеркала тряпкой. Затем он ехал со скоростью 40 км/ч в правом ряду и его начало выключать, то есть водитель стал засыпать. Я сделал ему замечание и попросил распределять своё время так, чтобы успеть доехать до вокзала до того, как поезд уедет. Водитель со словами "успеем" повернул на заправку и стал заправлять авто. 5 утра, деваться мне некуда. Далее мы выезжаем и водитель начинает ехать более активно, в одном из перекрестков где нам нужно было повернуть налево, навигатор сказал повернуть направо и конечно же водитель послушал его, а не то, что я ему сооющил о том,  что нам нужно повернуть налево. В то утро мы собрали все красные светофоры от КАД до московского вокзала. По итогу водитель за 2 км от вокзала упёрся в шлагбаум в каких-то дворах с правой стороны от вокзала. То, что он не понимал куда нужно приехать - это факт. Остаётся 3 минуты до отправления поезда, я ориентирую его как быстро проехать до вокзала, выбегаю с чемоданами и беру на Перон, а он уже пуст. Время 5:32


1. Если бы не заезжали на АЗС чтобы заправить машину - мы бы успели. Почему водитель занимается обслуживанием автомобиля в момент принятия заказа?

2. Водитель сам не знает куда едет и зачем, на автомате куда навигатор скажет

3. Безопасность - наверное за заезд на заправку я должен быть благодарным, так как водитель засыпал на ходу, видимо могло быть и хуже.


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


Что мы имеем в итоге:


Я попадаю на билет стоимость 3,5к

Я срочно покупаю билет на ближайший поезд чтобы успеть на деловую встречу, доплатив 4,5к.


Мне приходит автоматическое сообщение с телефоном какого-то таксопарка, мол разбирайтесь.


Ребят, вы вообще что-ли рухнули там? Я обращаюсь в Яндекс Такси, крупный агрегатор (и в компанию, которая до недавнего времени по моему мнению заботилась о своих клиентах и качестве предоставляемых ими услуг), который в такой ситуации спихивает мне телефон фиг знает кого, чтобы я с кем то там разбирался и просил вернуть мне 300 рублей? Курам на смех!


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


Приложение Яндекс.Тахи успешно удалено 👍

Как Яндекс.Тахи заботится о клиентах Яндекс Такси, Такси, Длиннопост
Показать полностью 1
Отличная работа, все прочитано!