×Закрыть

DOU Проектор: Як ми створили Hryvna Today — сайт про курс валют

Від редакції:
В рубриці DOU Проектор всі бажаючі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про що розповісти — запрошуємо прийняти участь. Якщо ні — можливо, серія надихне на створення власного made in Ukraine продукту. Питання і заявки на участь надсилайте на editors@dou.ua.

Ідея

Всім привіт! Я веб-розробник із Києва, в основному займаюся проектуванням і програмуванням CRM, обожнюю все, що пов’язано із граберами, апі та юзабіліті. Минулого року започаткував невелику команду Don’tgiveafish, що наразі займається в основному пет-проектами. Пару місяців тому я презентував тут наш сервіс Smartdelivery, а сьогодні розкажу про свій найулюбленіший проект — це Гривня Тудей, сайт про курс валют.

Для мене цей проект характерний тим, що на ньому вдалося протестувати багато практик і технологій, які давно хотілося спробувати. Про це — далі.

Все почалося з того, що курс гривні штормило наприкінці 2015 року. Всі намагались зрозуміти, що буде далі, прослідкувати історію змін, мати змогу проводити більш глибоку або швидку аналітику валютних «гойдалок». Серед всіх був і я, до того ж, складність була у тому, що я ніколи раніше не витрачав свого часу на вивчення цієї теми. В прагненні зрозуміти, що ж відбувається з курсом, яка різниця між курсами НБУ, банків, міжбанку та такого іншого, я шукав простих аналітичних інструментів, але не міг знайти чогось подібного у нас.

Саме тоді я помітив два цікаві канали на твітері, що кожен день публікували курс російського рубля та ціну нафти, додаючи до них дельту, на яку змінювався курс та ціна кожен день. О, це ж воно! Нажаль, подібних популярних українських профілів не було, тому я зрозумів — треба брати справу в свої руки.

Реалізація

За пару ночей до Нового року був написаний грабер, що брав з сайту НБУ та кількох комерційних банків курс і зберігав до себе у базу даних. Залишивши грабер працювати на новорічні свята, я пішов вивчати Twitter API, щоб робити автоматичні пости до твітеру. Шостого січня, коли я впевнився, що передноворічний грабер працює, нарешті, запрацював і бот.

Десь в той же час я знайшов цікаву статтю про професії, в яких роботи замінять людей. В цій статті був один пункт, що мене зачепив — деякі спортивні і погодні сервіси та сайти новин відмовляються від журналістів для написання стандартних текстів, бо на базі типових даних програма може видавати текст швидше, ніж людина. До того ж, вона може запропонувати декілька варіантів текстів, а модератор сайту лише трохи підредагує текст або просто затвердить той варіант, що йому більше сподобається.

Окей, вирішено, з цього часу акаунт гривні буде генерувати тексти, подібні до текстів, що написала людина.

Ідеальний дизайн і мрія про Site of the day

За деякий час до мене прийшов працювати над наступним проектом дизайнер Юрій Бондаренко, якому я розповів про свого нового бота. Він подивився на мене і каже — що ж, тоді будемо робити сайт!

Так ми почали розробку сайту. Концепція залишалась старою — все має бути простим, доступним, рушій має бути автоматизованим, і сайт має працювати сам по собі. Якщо на сайті будуть тексти, вони мають автоматично генеруватися і спадати на текст, написаний людиною.

Коли дизайн нарешті був готовий, ми скинулись на маркап та публікацію дизайну на Awwwards, також виклавши роботу на Behance та Revision. В результаті дизайн потрапив на головну на revision та отримав Honorable Mention на Awwwards. Для нашої команди це був величезний успіх і щастю не було лімітів!

Вчимося спілкуватися з пабліками і пресою

Що ж, коли ми вже запустили сайт, треба про нього розповісти людству. Я почав вишукувати сайти групи у фейсбуку, які б опублікували про нас невеличку статтю. Певно, надіслав із сотню листів та повідомлень. Не сильно сподівався на відповідь, але матеріал про нас опублікували — і це був шалений трафік! Весь день я провів просто дивлячись у Google Analytics.

Після цього я вивів для себе декілька правил, якими хочу поділитися з тими, хто планує запускати свій проект і ніколи цього не робив:
— Ви маєте розповідати про свій прект, інакше про нього ніхто не дізнається — шукайте сайти і групи у соціальних мережах, що зацікавлені у вашій тематиці, і пробивайте всі стіни;
— Не нехтуйте прес-релізом — на кожну добу, що ви витратили на проект, витратьте півгодини, щоб відповісти на питання «Що робить продукт? Як ви прийшли до цього? Хто брав участь у проекті?» та таке інше. Чим більше і повніше буде ваш прес-реліз, тим більше вірогідність, що з вами вийдуть на контакт;
— Більшість контактів вам навіть на відповість, проте частина з них все ж таки, запостять новину про вас;
— Не лінуйтесь складати список контактів, яким ви надсилаєте листи, бо незабаром ви можете випустити або цікаве оновлення, або новий продукт;
— Розмістіть у себе на сервері теку з пресс-релізом декількома мовами, логотипами та фотографіями учасників проекту, щоб журналісти мали доступ до максимальної кількості інформації.

Пишемо бота для розкрутки у твітері

Для розкрутки акаунту у твітері я вирішив вдатися до декількох хитрощів. Бюджету на розкрутку у нас не було, проте бажання вивчати і досліджувати — вкрай.

По-перше, я помітив, що користувачі переглядають пост і роблять репост більш охоче, якщо попередньо його вже репостнули. Тож, після публікації скрипт заходив на сайт addmefast і ставив накрутку одного-двох репостів. Так, доречі, з’явився addmefastapi, бо addmefast не має свого API, і довелося написати обгортку, щоб додавати туди свої пости автоматизовано.

По-друге, виявилось, що найкращим безкоштовним способом розкрутки акаунту у твітері є масфоловінг. Проте, навіщо робити все самостійно? Був написаний бот, що шукав людей, що читають новини, додавав їх у друзі та видаляв, якщо вони не додавали у відповідь. За допомогою такого простого алгоритму і цих двох інструментів популярність каналу почала зростати.

Доречі, коли у каналу стало 4000 фоловерів, обидва інструменти я відключив і зараз спостерігаю, як канал зростає без сторонньої допомоги.

В певний час я виклад код на гітхаб.

Інтегруємось!

За деякий час мені написав адміністратор сайту Inforesist — великого сайту новин. В листі він казав, що хоче завантажувати на свій сайт інформацію про курси валют з гривні тудей. Так стало зрозуміло, що як природне продовження сайту вже час запускати API, щоб інтегруватися у сторонні сайти та сервіси.

В якості обгортки для API я обрав Mashape — сервіс, який раніше хотів спробувати. Це дало змогу зробити зручну документацію і підключити просту статистику.

Як тільки API був готовий, я взявся до інтеграції на сайт. В результаті ми зробили сторінку з історією курсів, панель у шаблоні сайту з курсом гривні, долару і ціною нафти. Також, було зроблено два види статті, що автоматично генерувались для публікації у новини. Так я втілив минулорічну мрію, у якій роботи почали писати новини за людей.

Нещодавно я зацікавився ідеєю ботів у месенджерах. Як на мене, це нове слово у взаємодії з сервісами і незабаром ми можемо побачити розвиток цього напрямку. Тож, в результаті з’явився @HryvnaTodayBot. Ви можете написати цьому боту запит із переліку доступних команд, щоб отримати поточний курс валют. Це набагато швидше і зручніше, якщо вам потрібна лише частина інформації.

Доречі, код боту також відкритий і є на гітхабі.

Результати

Отож, ми бачимо, що якщо додати трохи уяви і знайти проблему, яку прагнемо вирішити, ми можемо не тільки вивчити технології, які давно цікавили, але й зробити корисний сервіс, яким буде користуватись сотні людей в день, приймаючи рішення на його основі. І це неабияке захоплення!

63 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Якщо подивитися графік курсу гривні за останній рік сторінка видає наступний малозрозумілий текст

«Середнє коливання за триста шістдесят днів — плюс 0 копійок у проміжку від 24.73 до 28.33 гривень за долар»

Обзор и оценку и продвижение можно получить здесь www.mywot.com/...en/scorecard/hryvna.today

Поменяйте категорию сайта здесь www.siteadvisor.com/sites/hryvna.today
Думаю, финансовый сервис будет лучше, чем Правительство/военные

Добавьте сайт еще сюда, добавит траста и органического трафика safeweb.norton.com/...ort/show?url=hryvna.today
и можно еще поставить сертификат безопасности

В те холодные предновогодние деньки декабря 2014 года, когда «штормило» курс, написал бота, который постит курсы в паблик вк vk.com/fuckinguah
Позже допилил и сайт http://uah.today но активным продвижением не занимался.
Кстати, код тоже на Yii у меня :)

Кул! Де берете чорний курс злотого і фони для постів?

Фоны беру где придется, обычно это в вк пабликах, злотый вроде с finance.ua, уже и не помню :)

Раптом згадаєте — пишіть, цікаво :-)

На втором графике (курсы банков) день недели отстает.
Например сейчас показывает «СР 21.04», хотя сегодня четверг.

Дякую, вже повідомили про цей баг, відкрив тікет тут, незабаром буде виправлено:
github.com/...sh/hryvna-today/issues/14

«Середнє коливання за десять днів — плюс 0 копійок у проміжку від 25.57 до 25.64 гривень за долар.» якось дивно звучить :)

Дякую! Виправлю, слідкувати за перебігом можна тут:
github.com/...sh/hryvna-today/issues/13

йо, подвал просит апдейта

ГРИВНЯ ТУДЕЙ © 2015

Так, я думав, що так можна показати дату створення, але мені вже сказали, що це неправильний формат :-) Дякую!

показати дату створення
ГРИВНЯ ТУДЕЙ © 2015-2016

Нужен «коммерческий» курс.

Так це ж курс в банках, хіба ні?

Нет. Он определяется коммерсантами на таких данных как: средневзвешенный курс (по которому реально купить наличный бакс) нескольких банков + менялы оптовые. Зачастую вводят ручками.

Чи існує якась формула чи більш точне визначення? Бо потрібні цифри є, лишається зліпити з них потрібні дані.

точного определения нет. Пример: предприниматель покупает/продает товары на сумму 20килобаксов ежедневно. Курс банка = 25,05 но в сутки банк продает в одни руки 1килобакс. Значит надо несколько таких банков (курс разный). В то же время у менял можно купить в день 100килобаксов, но по курсу 25,55 (опт). Кроме того, в некоторых банках можно получить «оптовый» курс. В общем условий может быть множество.

Ну тоді незрозуміло, де його брати.

Нужен «Наличный черный рынок валют».
Пример есть на finance.i.ua

Власне це чорний ринок, він є.

Увидел. В принципе этого достаточно. Спасибо за ресурс.

Хотелось бы развернутый черный ранок finance.i.ua/market/kiev/
Среднее иногда завышают/занижают, путем размещения фэйковых предложений.
Но это уже хотелки)

Так, думаю про розширення чорного ринку, бо це всіх цікавить більше за інше, бо в банках валюту нормально не купиш. Дякую вам!

зазвичай тут дивлюсь якщо хочу купити чи продати валюту
minfin.com.ua/...ncy/auction/usd/buy/kiev

А что такое курс покупки и продажи НБУ?

Курс НБУ, ці два числа завжди однакові.

Чому в розділі «Гривня за тиждень» графік йде до низу, якщо самі пишете що гривня зміцнилась? То це графік долар за тиждень виходить

Тому що коли курс гривні до долара знижується, то гривня зміцнюється :-)

Чудовий проект! Єдине що: стрілочки, що вказують на коливання курсу, все ж, звичніше бачити зелені — догори, а червоні — вниз. А у вас навпаки. Чи то спеціально, щоб показати рух на користь гривні?

Дякую! Так, все правильно — показати рух на користь гривні.

Тоді — браво! Просто браво :) Я вже сайт порекламував у себе на ФБ — очікуйте напливу відвідувачів!

Так давайте прогноз курсу якийсь, і алерт, бігти здавати гривні, долари чи євро, і куди саме бігти.

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

в умовах нестабільного ринку
тим більше треба, динаміка шалена. Ну формулами вірогідності тут не обійтися.

Тоді запрошую вас і спільноту до розробки прогнозування :-)

В нас із колегами була дискусія на цю тему. Дехто має досвід з Machine Learning (так, це трохи хитріше за формули вірогідності).
Так, от, прогнозувати «антропогенні», «не системні» речі — муть. Тобто, якщо комусь наближеному до важелів керування курсом гривні (а цей важіль таки є) заманеться провести певні коригування — ніякі аналізи/статистика цього не передбачать, погодьтесь. Ну, ми ж не знаємо 100% коли черговому «слузі народу» закортить прикупити яхточку...

Дуже крутий проект, і стаття крута. Дякую)
Як взагалі зараз із відвідуваністю ресурсу?

Дякую! Десь тисяча людей в день на сайті, і 80% це користувачі, що повертаються. На фейсбуку, твітері та поштовій розсилці десь 10-20% від всіх фоловерів на день, тобно ще плюс тисячу переглядів у соціальних мережах.

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

Я пошел дальше и написал себе за 2 вечера курс валют на часики pp.vk.me/...5610/2638/vLcT1nspzY0.jpg
Если кому интересно — планирую закинуть в апстор

Круто! Я б тільки додав прапорець, що показує, куди змінився курс.

О, это чудесно, когда вы выложите об этом статью на доу и сделаете свою компанию? (сарказм, к вам ни каких претензий)

Ну для начала я запулил в апстор и завел страничку на фейсбуке ;)
www.facebook.com/...рс-валют-1728406027430982

Чем не подошел kurs.com.ua, finance.ua/ru/currency, табличка на улице, *подставь свое* - тысячи их. И зачем выкладывать невероятную историю как вы изучили twitter апи и попользовались маркером на белой доске? Это даже за лабу в универе бы не приняли. Тут на самом деле даже больше вопрос к dou.ua, если они стали такое выкладывать...

ут на самом деле даже больше вопрос к dou.ua, если они стали такое выкладывать...

Ваши 2 комментария DOU тоже выложил, и ничего плохого не случилось.

Если пропустили, вот информация о рубрике еще раз, рубрика запущена почти полгода назад:

В рубриці DOU Проектор всі бажаючі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про що розповісти — запрошуємо прийняти участь. Якщо ні — можливо, серія надихне на створення власного made in Ukraine продукту. Питання і заявки на участь надсилайте на valentina@dou.ua.

Признаю, DOU тут не при чем.

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

сайт или приложение

Уже новый тренд, первым проектом должен быть бот.

< зануда >Много излишков кода. Чего стоит formatDate (вообще весь Storyteller это еще тот адок).
Почему не используете i18n? Миграции? Названия классов типа «ExchangeRateGrabberStrategyAbstract» вообще ахтунг.
Граббер я бы реализовал в качестве компонента.< / зануда >

Но это чисто по коду. Главное красиво и работает =)

Так, там у коді ще є що реюзити і перероблювати. Проте за назви класів можемо посперечатись, вони за спеціалізацією патернів і phptherightway :-)

Я після всіляких best practice та книжок банди чотирьох пишу тільки так :)

aspectj.sourcearchive.com/...Visitor_8java-source.html

Немного критики, я надеюсь, конструктивной
1) Для обывателя имеет значение реальный курс валют. Курс же нацбанка — некая абстракция, к жизни отношения не имеет
2) Попробуйте взять РЕАЛЬНЫЙ то есть чёрный курс и добавить аналитику а-ля форекс. Я думаю, за эту информацию уже и денег можно брать, поскольку многих интересует покупать доллар, или ещё погодить.

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

Если интересно дать инструменты для технического анализа, постучись — может найдём точки соприкосновения

Для черного рынка хорошая апишка на CashExchange, я для приложения на часики взял ее

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

Дмитро, дякую! Чорний ринок це середнє арифметичне з валютного чорного аукціону трьох сайтів: мінфін, фінанси і телеграф.

Прекрасно! Теперь понятно, буду больше пользоваться.

Мне этой информации не хватало: было непонятно, как курс высчитывается. Может, добавить tooltip с коротким объяснением? На minfin’e это характерно реализовано.

Еще раз спасибо! С удовольствием помогу с текстами (англ/рус/укр), если нужно.

Ну, для абсолютного розуміння у нас код на гітхабі, але ж зрозуміло, що не всі підуть його читати :-) Але дякую за підказку, я планував зробити деякі зміни в дизайні, записав вашу ідею. Дякую вам!

Подписаться на комментарии