• XSS.stack #1 – первый литературный журнал от юзеров форума

Простая звонилка на python

Gr00ve

RAM
Пользователь
Регистрация
12.12.2019
Сообщения
102
Реакции
92
Написал простую звонилку на Python



Обзванивает 1000 номеров за 2 часа и 20 минут.

Может кому пригодиться

Python:
# _*_ coding: utf-8 _*_
import os
import time
import serial
from queue import *
from threading import Thread



base = "phonebase.txt"
result_temp = "Result"
thread_count = 1

port = input('Введите адрес порта: ')
print('<<<****>>> Проверяю соединение с модемом <<<****>>>\n')


phone = serial.Serial(port, 115200, timeout=5)
time.sleep(1)
print('Модем успешно подключен\n')
time.sleep(1)
print('Приступаю к выполнению обзвона базы\n')


def callphone(phonebase):
    try:
        time.sleep(1.5)
        phone.write(b'ATZ\r\n')  # Команда для заводских настроек
        time.sleep(1)
        phone.write(b'ATD' + phonebase.encode() + b';\r\n')  # Команда для набора номера
        time.sleep(5.5)
        call_reset = phone.write(b'AT+CHUP\r\n')    # Сброс звонка после заданного тайм аута
        time.sleep(0.2)
        if call_reset > 0:
            i = "Good"
            return [True, i]
    except:
        return False, None
    return False, None


def run(queue, result_queue):
    # Цикл продолжается пока очередь задач не станет пустой
    while not queue.empty():
        # получаем первую задачу из очереди
        phonebase = queue.get_nowait()
        # проверяем статус звонка
        status = callphone(phonebase)
        # сохраняем результат для дальнейшей обработки
        result_queue.put_nowait((status, phonebase))
        # сообщаем о выполнении полученной задачи
        queue.task_done()

        print('{} finished result = {}'.format(phonebase, status))


def main():
    start_time = time.time()

    # Для получения задач и выдачи результата используем очереди
    queue = Queue()
    result_queue = Queue()

    fr_success = os.path.join(result_temp, "good.txt")
    fr_errors = os.path.join(result_temp, "error.txt")

    # Сначала загружаем все номера
    with open(base) as f:
        for line in f:
            queue.put(line.strip())

    # Затем запускаем необходимое количество потоков
    for i in range(thread_count):
        thread = Thread(target=run, args=(queue, result_queue))
        thread.daemon = True
        thread.start()

    # И ждем, когда задачи будут выполнены
    queue.join()
    # После чего пишем результаты в файлы
    with open(fr_success, 'w') as fs, open(fr_errors, 'w') as fe:
        while not result_queue.empty():
            status, phones = result_queue.get_nowait()

            if status[0]:
                f = fs
            else:
                f = fe

            f.write('{} >> {}'.format(phones, status[1]))
            f.write('\n')

    total_time = (time.time() - start_time)
    times = time.strftime("%H:%M:%S", time.gmtime(total_time))
    print("Время выполнения программы заняло: " + times + "\n")
    print('Обзвон базы выполнен')


if __name__ == '__main__':
    main()
 
Есть возможность запилить проигрывание мп3 файла и запихнуть под хайд хотя бы 20?
К сожалению уже нету модема чтобы протестировать .
 
А зачем многопоточность, разве один модем может паралельно звонить на несколько номеров?
Может кто захочет подключить 10 модемов , так на всякий случай ) (вообще я уже не помню, писал давно и для себя )
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх