SMS сервисы для ленивых

amyboose

Client
Joined
Apr 21, 2016
Messages
2,311
Reaction score
1,191
Points
113
Существует множество смс сервисов и для удобства я написал библиотеку, которая позволяет упростить работу с ними по сравнению с решением от ZennoLab.

Какие сервисы на данный момент поддерживаются:
  • Sms-activate
  • SmsHub
  • Vak Sms
  • Sim Sms
  • 5 Sim
  • Sms Aktiwator
Давайте рассмотрим что умеет библиотека.

1. Получаем номер
Идентификатор для страны и для сервиса искать не нужно, они уже находятся внутри кода.
Можно получить множество параметров о полученном номере в зависимости от того, какие функции поддерживает смс сервис
C#:
//Получаем api ключ из настроек зеннопостера
string apiKey = SupportClass.GetSmsServiceApiKey("FiveSimSms");
//Создаем информацию о сервисе
FiveSimService fiveSimService = new FiveSimService(apiKey);
//Создаем задачу, которая будет хранить всю информацию о текущем статусе работы с определенным номером
FiveSimTask fiveSimTask = new FiveSimTask(fiveSimService);
//Получаем смс и возвращает true или false в зависимости от того получен смс или нет
//Также можно посмотреть ошибку
bool gotSms = fiveSimTask.GetNewPhone(WebService.Facebook, Country.Russia, out SmsServiceException exception);
//Если номер не получен, то генерируем полученную ошибку (можно тут любую логику прописать)
if (!gotSms)
    throw exception;
//Просматриваем информацию о полученном номере

//Получаем id
string id = fiveSimTask.Id; //141776002
//Номера телефона
string phone = fiveSimTask.Phone; //79309535975
//Телефон без кода страны
string phoneWithoutCountryCode = fiveSimTask.PhoneWithoutCountryCode; //9309535975
//Цена полученного номера (не всегда верная информация из-за ограничений смс сервисов)
float price = fiveSimTask.Price; //6
//Время создания
DateTimeOffset creationTime = fiveSimTask.CreationTime; //14.08.2021 11:09:36 +00:00
//Время окончания (поддерживается не всеми сервисами)
DateTimeOffset? expiredTime = fiveSimTask.ExpiredTime; //14.08.2021 11:24:36 +00:00
//Имя оператора (только если оператор был задан изначально или сервис поддерживает возврат имени)
string phoneOperator = fiveSimTask.PhoneOperator; //tele2
//Текущий статус смс, может быть WaitReady, Pending, CodeReceived, Finished, Canceled, Banned
SmsStatus? status = fiveSimTask.Status; //Pending
//Таймаут ожидания смс, по умолчанию 1 минута
TimeSpan ts = fiveSimTask.Timeout; //00:01:00
//Alpha2 страны, часто применяется в селекторах сайтов регистрации
string countryAlpha2 = fiveSimTask.PhoneCountry.Alpha2; //RU
//Имя страны
string countryName = fiveSimTask.PhoneCountry.EnglishName; //Russia
//Название валюты на английском
string currencyName = fiveSimTask.PhoneCountry.CountryCurrency.EnglishName; //Russian Ruble
//Название валюты по ISO
string currencyISO = fiveSimTask.PhoneCountry.CountryCurrency.ISOSymbol; //RUB
Вариант с получением номера с лимитом по цене. Вернется false, если по данной цене номера нету. Из-за ограничений сервисов по количеству запросов и отсутствии некоторого функционала поддерживается не везде. На sms hub меня уверяли в том, что у них нельзя брать начиная с самых дешевых с ограничением по цене только через API, но я нашел как это обойти и теперь на нем поддерживается данный функционал.
C#:
bool gotSms = fiveSimTask.GetNewPhone(WebService.Facebook, Country.Russia, out SmsServiceException exception, maxPrice: 8);
2. Устанавливаем статус ожидания смс (Pending)
Можно задать 2 варианта - очищать смс код, если он есть или оставить как есть. Этот функционал может быть полезен, если вы нажимаете на кнопку на сайте, а потом устанавливаете статус ожидания смс, а в этот момент смс уже могло прийти. Тогда у кода есть 2 варианта - либо очистить последнее смс и ждать новое, либо сохранить смс и при следующем запросе смс вы получите его.
false - не сбрасывать
true - сбрасывать и ждать новый код
C#:
fiveSimTask.SetStatusPending(disposeCodeIfExist: false);
3. Устанавливаем таймер, если нужно и получаем смс.
C#:
//Задаем таймаут ожидания смс
fiveSimTask.Timeout = TimeSpan.FromSeconds(90);
//Задаем интервал, через который будут идти запросы на проверку статуса смс кода
fiveSimTask.PollingInterval = TimeSpan.FromSeconds(10);
//Получаем смс код или null, если код не получен
string code = fiveSimTask.GetSmsCode();
4. Устанавливаем статус ожидания ещё 1 кода (если нужно).
Применяю эту функцию постоянно в своем коде.
C#:
fiveSimTask.RepeatActivation();
5. Завершаем активацию.
C#:
fiveSimTask.FinishActivation();
6. Блокируем номер, как плохой (альтернативный вариант, используется за место варианта 5)
C#:
fiveSimTask.BanPhone();
7. Отменяем активацию (альтернативный вариант, используется за место варианта 5)
Поддерживается только если номер не был получен до этого, иначе генерирует ошибку
C#:
fiveSimTask.CancelActivation();
8. Альтернативные варианты
Иногда неизвестно получится ли установить данный статус и для таких случаев припасены альтернативные методы с отображением ошибок. В таких случаях помогают альтернативные методы, которые возвращают true или false вместе с ошибкой, которую можно получить и самому проанализировать.
C#:
bool success = fiveSimTask.TryFinishActivation(out SmsServiceException ex);
C#:
bool success = fiveSimTask.TryBanPhone(out SmsServiceException ex);
C#:
bool success = fiveSimTask.TryCancelActivation(out SmsServiceException ex);
9. Получаем список всех цен для данного сервиса, отсортированные, начиная с самой низкой.
Зачастую хочется получать смс от самых дешевых номеров, а сервисы могут в режиме реального времени менять цены. По этой причине я создал несколько функций, которые позволяют получать список с ценами и определять самые низкие.

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

Получение всех цен:
C#:
PriceInfo[] prices = fiveSimService.GetPrices(WebService.Facebook)
                .Where(x => x.Count > 0)
                .ToArray();

string priceStringExample = string.Join(Environment.NewLine, prices.Take(5).Select(x => $"Страна: {x.CountryInfo.EnglishName}, количество: {x.Count}, цена: {x.Price}"));
//Страна: Indonesia, количество: 1, цена: 2
//Страна: United States, количество: 53417, цена: 3
//Страна: Canada, количество: 5670, цена: 3
//Страна: Cambodia, количество: 1000, цена: 3
//Страна: Bolivia, количество: 29, цена: 3
Получаем самую низкую цену с количеством номеров больше 10:
C#:
PriceInfo pi = fiveSimService.GetLowPrice(WebService.Facebook, minPhonesCount: 10);
string lowPriceStringExample = $"Страна: {pi.CountryInfo.EnglishName}, количество: {pi.Count}, цена: {pi.Price}";
//Страна: United States, количество: 53417, цена: 3
Получаем список цен с операторами, начиная с самой низкой для России, Украины и Беларуси:

C#:
PriceInfo[] prices = fiveSimService.GetPrices(WebService.Facebook, new Country[] { Country.Russia, Country.Ukraine, Country.Belarus })
                .Where(x => x.Count > 0)
                .ToArray();

string priceStringExample = string.Join(Environment.NewLine, prices.Take(5).Select(x => $"Страна: {x.CountryInfo.EnglishName}, количество: {x.Count}, цена: {x.Price}, операторы: {string.Join(", ", x.PhoneOperators)}"));
//Страна: Russia, количество: 149, цена: 6,5, операторы: beeline, lycamobile, matrix, megafon, mts, rostelecom, tele2, virtual15, virtual27, yota
//Страна: Ukraine, количество: 1000, цена: 12, операторы: virtual23
//Страна: Ukraine, количество: 1000, цена: 12,3, операторы: virtual18
//Страна: Belarus, количество: 1000, цена: 12,3, операторы: virtual18
//Страна: Belarus, количество: 1000, цена: 20, операторы: virtual21, virtual23
Функционал библиотеки шире, чем я расписал. Примеры кода я привёл, архив с библиотеками прикладываю, пользуйтесь.
Шаблон с примерами сделаю позже.

Не откажусь от донатов, если кому-то понравится моя работа.
Могу подключить библиотеки вам самим, цены начинаются от 2500 руб в зависимости от сложности. Сами понимаете, время - деньги, а на библиотеку потрачены сотни часов времени. Верну деньги, если функционал не понравится или будет серьезный баг.

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

Attachments

Last edited:

dmitriy1384

Client
Joined
Nov 4, 2013
Messages
377
Reaction score
134
Points
43
Я так понимаю, что это очень огромные труды и большая польза, жаль я в этом не шарю. Придется использовать стандартные кубики или get-запросы.
 

amyboose

Client
Joined
Apr 21, 2016
Messages
2,311
Reaction score
1,191
Points
113
Я так понимаю, что это очень огромные труды и большая польза, жаль я в этом не шарю. Придется использовать стандартные кубики или get-запросы.
Да я ещё в 2018 или 2019 начинал его делать. Потом занимался другими делами. Вот в этом году перелопатил всё.
Причина простая - есть сервисы-монополисты, которые цену постоянно повышают и я решил бороться, ведь другие сервисы тоже достойны внимания, так как у них цены ниже. Конкуренция в ценах поможет оздоровить несправедливые условия и сверхзаработок.
А мы, как потребители, от этого выиграем
 

sergio197675

Client
Joined
Sep 21, 2019
Messages
360
Reaction score
320
Points
63
Колоссальный труд , делал подобное на кубиках...но перегорел с желаниями уже на 3м сервисе))
 

radv

Client
Joined
May 11, 2015
Messages
3,837
Reaction score
2,045
Points
113
Молодец :ay: . я в своих проектах, почти так и делаю.Будет интересно сравнить идеи по реализации
 

amyboose

Client
Joined
Apr 21, 2016
Messages
2,311
Reaction score
1,191
Points
113
Прикрепил библиотеки новые (пару исправлений) и кубик с C# кодом.
Для использования нужно иметь некоторые познания C# и вырезать нужные куски кода из приведенного примера шаблона для смс сервиса. Сам не могу, времени на всё не хватает
 

lbvf65

Client
Joined
Aug 20, 2020
Messages
440
Reaction score
114
Points
43
Прикрепил библиотеки новые (пару исправлений) и кубик с C# кодом.
Для использования нужно иметь некоторые познания C# и вырезать нужные куски кода из приведенного примера шаблона для смс сервиса. Сам не могу, времени на всё не хватает
:bt::ay:
 

killareben

Client
Joined
Jun 9, 2022
Messages
28
Reaction score
0
Points
1
Добрый день, кто пользуется данной библиотекой? Есть возможность помочь мне в ней разобраться? Конкретно с ее установкой в зенопостер, так как все нужное скачал, поставил куда нужно но много ошибок сразу на моменте
//Создаем информацию о сервисе
 

Figma1322

Пользователь
Joined
Feb 17, 2023
Messages
54
Reaction score
10
Points
8
Приветствую! У вас нет контактов в теме. Могли бы пожалуйста связаться в телеграм https://t.me/danvenso
 

Grizzly Andy

Пользователь
Joined
Nov 30, 2022
Messages
53
Reaction score
0
Points
6
Доброго времени суток. Свяжитесь со мной t.me/andrey_grizzly_1
Спасибо
 

Grizzly Andy

Пользователь
Joined
Nov 30, 2022
Messages
53
Reaction score
0
Points
6

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)