Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

[Урок 7]. Регулярні вирази в JS на практиці. Препаруємо біткойн-крани з iMacros.

  1. Отримуємо розмір реферальной комісії біткойн-крана
  2. Отримуємо інтервал збору Сатоши на біткойн-крані
  3. Отримуємо розмір нагороди на біткойн-крані
  4. Міні-бібліотека для отримання інформації про біткойн-крані

Наша взаимовыгодная связь https://banwar.org/

У минулому уроці ви вже трохи познайомилися з регулярними виразами JavaScript. Сьогодні ми спробуємо використовувати їх на практиці спільно з iMacros. Я буду розглядати приклади, які вам можуть реально стати в нагоді в ваших скриптах. Бувають ситуації, коли потрібно обробити кілька сайтів з різним дизайном і відповідно з відмінною html-розміткою. Припустимо, ви не знаєте, в яких тегах знаходиться цікавить вас інформація, але точно знаєте, що вона розташована відразу після будь-якої фрази або між двох слів і складається, скажімо з декількох цифр. Для таких завдань, регулярні вирази - ідеальне рішення.

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

Ось перший приклад біткойн крана:

Ось перший приклад біткойн крана:

Тут ми бачимо фразу «150 satoshi every 180 minutes«, під яку легко написати регулярку використовуючи опорні слова і отримати розмір нагороди і інтервал для клейма.
І ще «Share this link with your friends and earn 10% referral commission«, тут теж досить опорних слів, навколо цифри 10, яку нам належить витягнути.

Другий приклад:

Другий приклад:

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

Поки вистачить цих двох різновидів кранів, хоча можна адаптувати ваш код під будь-яку кількість різних кранів і написати універсальний скрипт зі збору Сатоши з більшості кранів на автоматі.

Отримуємо розмір реферальной комісії біткойн-крана

Почнемо з простого скрипта. У нас є фраза:

«Share this link with your friends and earn 10% referral commission«

На різних кранах початок фрази може відрізнятися, але як правило закінчується вона однаково «referral commission«. Тому ми складемо шаблон такого виду:
[1-3ціфри] [знак відсотка] [пробіл і залишок фрази]

Якщо виражати в коді, то вийде ось так:

var str = window.document.querySelector ( 'body'). textContent; // текст всієї сторінки var found = str.match (/ (\ d {1,3})% referral commission / i); // [ "10% referral commission", "10"] window.console.log (found [1]); // 10

\ D {1,3} означає від 1 до 3 цифр, ще ми уклали цю конструкцію в круглі дужки, це додало в масив значення, якому відповідає цей вислів - тобто «10». Начебто все непогано, але давайте подивимося, що станеться, якщо на сторінці не виявиться рядка з реферальной комісією.

Ми отримаємо помилку TypeError: found is null, line 107 (Error code: -991)

Вона сталася, бо на сторінці не знайшлося жодного збігу з шаблоном нашого регулярного виразу і в підсумку found = null. Помилка виникає, коли ми намагаємося вивести на екран другий елемент масиву за допомогою found [1], його просто не існує. Через таких дрібних помилок ваш скрипт просто перестане працювати, тому завжди думайте, як буде працювати ваш iMacros-скрипт у всіх можливих ситуаціях. Давайте виправимо цю помилку і заодно обгорнемо весь скрипт в функцію, щоб можна було одним рядком викликати в потрібному місці. Наша функція буде повертати або відсоток нагороди, або false.

var getRefComission = function () {var str = window.document.querySelector ( 'body'). textContent; var found = str.match (/ (\ d {1,3})% referral commission / i); return found! = null? found [1]: false; }; window.console.log (getRefComission ()); // 10

Тут я трохи інакше визначив функцію var getRefComission = function () {, це те ж саме, що і function getRefComission () {. Такий код ми можемо запустити на абсолютно будь-якому сайті і помилок не буде при будь-якому вмісті сторінки. Завжди намагайтеся писати функції, які не будуть звалюватися з помилкою і зупиняти роботу iMacros, навіть якщо вони виконуються на абсолютно порожній сторінці. Тоді ваші скрипти будуть бронебійними і зможуть працювати при будь-яких помилках 24 години на добу і 7 днів на тиждень, не вилітаючи.

Отримуємо інтервал збору Сатоши на біткойн-крані

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

«150 satoshi every 180 minutes. «
«60 (95%), 100 (4%), 150 (1%) satoshi every 240 minutes. «

На даний момент нас цікавить не розмір нагороди, а друга частина фрази, яка ідентична (виділив курсивом). Складаємо відразу регулярний вираз і обертаємо його в функцію:

var getClaimInterval = function () {var str = window.document.querySelector ( 'body'). textContent; var found = str.match (/ satoshi every (\ d {1,4}) minutes / i); // [ "satoshi every 240 minutes", "240" ] return found! = null? found [1]: false; }; window.console.log (getClaimInterval ()); // 240

Думаю, тут все зрозуміло.

Отримуємо розмір нагороди на біткойн-крані

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

// Для першого випадку (Нагорода 150 Сатоши зі 100% ймовірністю) [{reward: 150, percentage: 95}] // Для другого випадку [{reward: 60, percentage: 95}, {reward: 100, percentage: 4} , {reward: 150, percentage: 1}]

За допомогою такої структури ми описали всі можливі випадки для наших 2 кранів. Потрібно зробити скрипт, який буде працювати з будь-якою кількістю можливих нагород.
Невелика ремарка: на деяких кранах крім декількох нагород з різних шансом, ще розмір кожної нагороди може варіюватися, наприклад «100-120 (10%)«, тоді ви можете замість ключа reward в масиві об'єктів, додати minReward і maxReward. Ось так легко можна розширювати можливості обраного вами формату даних.

Для створення більш складних регулярок я зазвичай використовую сайт https://regex101.com . Я просто зайшов на біткойн-кран і за допомогою Ctr + A і Ctrl + C скопіював весь текст і вставив на цьому сайті. Я написав вираз і справа відразу видно, що в тексті знайдено 3 збіги з патерном, і, за допомогою дужкових груп, я можу витягнути значення відсотків і нагород.

Підсумкове регулярний вираз:

(\ d {2,4}) \ ((\ d {1,3})% \)

(\ D {2,4}) - перша Дужковий група (розмір нагороди в Сатоши), від 2 до 4 цифр
(\ D {1,3}) - друга Дужковий група (відсотки), від 1 до 3 цифр
\ (... \) - це звичайні дужки (не плутайте з Дужковий групами), як бачите вони екрановані зворотними Слеш
Не забудьте пробіл між Дужковий групами, або можете замінити його класом \ s

Забігаючи трохи вперед, скажу, що ми будемо застосовувати нестандартне використання функції replace (), про що я говорив в минулому уроці.

Підсумковий код вийде такий:

var getReward = function () {var str = window.document.querySelector ( 'body'). textContent; var out = []; // результуючий масив // Для першого крана var found = str.match (/ (\ d {1,9}) satoshi every (\ d {1,4}) minutes / i); // found = [ "150 satoshi every 180 minutes", "150", "180"] // для другого крана ця регулярка поверне null if (found! = Null) {out.push ({reward: parseInt (found [1 ]), // Перетворимо рядок в число percentage: 100}); } // Для другого крана // Таке рішення з match не підійде: // var found2 = str.match (/ (\ d {2,4}) \ ((\ d {1,3})% \) / ig ); // [ "60 (95%)", "100 (4%)", "150 (1%)"] // Скористаємося чіторним методом replace з каллбеком: var found = str.replace (/ (\ d {2, 4}) \ ((\ d {1,3})% \) / igm, function (match, rwd, prtg, offset, string) {out.push ({reward: rwd, percentage: prtg}); return match ;}); return out; }; window.console.log (getReward ());

Відмінно! На обох кранах ми отримуємо рівно такі структури даних, які я описав вище. Між іншим, це коректний JSON-формат, з яким ми познайомимося трохи ближче в наступних уроках і ви полюбите його!

Ще я буду вас потихеньку привчати, як грамотніше оформляти свій код. Ви напевно вже звикли бачити в скриптах з інтернету паршиво відформатовані скрипти, що містять в собі безліч var і купу function func1 () {} і т.д. Це не найкращий підхід.

Я зараз вам покажу, як можна упакувати все створені нами функції в один великий об'єкт. Такі об'єкти дуже зручно використовувати в своїх різних скриптах, як свого роду невелику бібліотеку функцій. Крім упаковки в об'єкт, я буду використовувати покажчик this. Детально розбирати не буду, в принципі там все і так повинно бути більш-менш зрозуміло.

Міні-бібліотека для отримання інформації про біткойн-крані

var Helper = {_getContent: function () {return window.document.querySelector ( 'body'). textContent}, getRefComission: function () {var found = this._getContent (). match (/ (\ d {1,3 })% referral commission / i); return found! = null? found [1]: false; }, GetClaimInterval: function () {var found = this._getContent (). Match (/ satoshi every (\ d {1,4}) minutes / i); return found! = null? found [1]: false; }, GetReward: function () {var out = []; var found = this._getContent (). match (/ (\ d {1,9}) satoshi every (\ d {1,4}) minutes / i); if (found! = null) {out.push ({reward: parseInt (found [1]), percentage: 100}); } Var found = this._getContent (). Replace (/ (\ d {2,4}) \ ((\ d {1,3})% \) / igm, function (match, rwd, prtg, offset, string ) {out.push ({reward: rwd, percentage: prtg}); return match;}); return out; }}; // Приклад використання window.console.log ( `================================== Possible rewards:`) ; Helper.getReward (). ForEach (function (item) {window.console.log ( `$ {item.reward} satoshi with chance $ {item.percentage}%`);}); window.console.log ( `Interval: $ {Helper.getClaimInterval ()} minutes Ref.reward: $ {Helper.getRefComission ()}% =================== =============== `);

Ось, що вийде:

Ось, що вийде:

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

Пишіть ваші зауваження, запитання та пропозиції в коментарях!

Null?
Null?
Null?
Null?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: