Chat — Python Чат (2) Профи Python'a помогите!!!


Содержание

Python Сокеты на примере чата

  • Автор темы
  • #1

The Architect

The Architect

Итак, начнём.
Чаще всего используют такие сетевые протоколы, как TCP и UDP. В чём же они отличаются?
TCP — безопасный сетевой протокол, который требует подтверждение на обмен пакетами данных. Все данные приходят к клиенту. Из-за этого всего имеет не такую большую скорость, как UDP. ОБычно используется в ачатах и тому подбной фигне.
UDP же передаёт пакеты данных кусками и они могут теряться, это связано с тем, что данный протокол не требует подтверждений. В случае потери части данных мы об этом никак не узнаем. Используется, например, в онлайн играх.
Итак, давайте приступим в самому чату.
Для реализации чата нам требуется 2 программы — сервер и клиент.
Начнём с сервера.

API ВКонтакте для Python

Всем привет! Сегодня я расскажу вам немного о Пайтоновском API для соц. сети ВКонтакте.

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

Поскольку я сама не особо сильна в Пайтоне, о различных аспектах этого прекраснейшего языка (ООП, функциональное программирование и т.д.) я умолчу.

Пайтоновскую виртуальную машину под винду вместе с небогатой средой разработки IDLE можно скачать здесь.

Не советую качать версию 3.5, ибо под ней некоторые модули (ещё не обновившиеся) могут не работать.

И если вы только начинаете знакомиться с этим языком, не советую также качать версии ниже третьей.

Если вы юзаете UNIX то должны сами знать где гуглить. Под Убунтой просто обновитесь (типа sudo apt-get update).

Также рекомендую поставить pip под вашу версию языка.

В командной строке или терминале введите pip install vk (pip3 install vk)

Или можете воспользоваться этой ссылкой.

Также присутствует документация с примерами.

Что надо сделать ВКонтакте?

Тыкаем там на кнопку «Создать приложение»

Вводим имя и нажимаем «Подключить приложение». Тип оставляем Standalone.

После создания приложения заходим в его настройки и копируем (запоминаем) его идентификатор, он нам позже пригодится. На скриншоте ID закрашен другим цветом.

Дополнительно можно также загрузить свою иконку, поменять имя и т.д.

Теперь самое интересное. Нужно получить токен авторизации.

В принципе, модуль vk вполне работает и без него. Некоторые методы могут быть вызваны вообще без авторизации на сайте. Кроме того, вы можете в самом приложении авторизоваться через свой логин и пароль (как показано в этом примере).

Цукерберг рекомендует:  Вакансии Intaro

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

Прикол в том, что токен авторизации выдаётся конкретному приложению с конкретными правами доступа и конкретным ID. Т.е. в принципе, разрабу модуля он бесполезен.

А вот ваши данные авторизации могут быть вполне полезны. Потому я считаю что лучше юзать токен. По крайней мере, если у вас возникнут какие-то подозрения, не придётся менять пароль и засвеченную почту (номер телефона).

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

Как получить токен авторизации для Standalone-приложения описано здесь. Вам (или пользователю приложения) нужно перейти по ссылке определённого вида, авторизоваться ВКонтакте (если вы это ещё не сделали), в открывшемся фрейме внимательно прочесть какие разрешения запрашивает приложение, выдать приложению доступ, и из перенаправленной ссылки вытащить токен авторизации.

Вот пример ссылки:

Это запрос к сайту на выдачу токена авторизации для нашего Standalone-приложения. Разберём подробнее.

redirect_uri=https://oauth.vk.com/blank.html — в случае Standalone-приложений ВКонтакте обязывает использовать именно такой адрес перенаправления.

scope=friends,photos ,audio,video,docs,notes,pages,status,wall,groups,messages,notifications,offline — самое интересное. Это список запрашиваемых разрешений. Полный список возможных разрешений можно найти здесь.

Будьте крайне внимательны при составлении этого списка. Фактически, он определяет все возможности, доступные обладателю токена. Особо обратите внимание на последний параметр offline — при его использовании будет выдан бессрочный токен авторизации.

После того, как юзер даст приложению доступ со страницы ВК, его перебросит на пустую страницу с URL вида

С некоторыми дополнительными параметрами. Для авторизации приложению необходим токен, стоящий в параметре access_token. Вам необходимо его вытащить.


После этого необходимо авторизоваться в самой программе. На сайте разработчика модуля приводится такой простой пример:

После этого у объекта api вы можете вызывать все методы, перечисленные на этой странице.

К примеру, написание первого поста:

api.wall.post(message = ‘Hello, World!’)

Приведёт к появлению на вашей стене текстового поста.

Лирическое отступление относительно токенов и добросовестности

Как видите, процедура получения токена довольно проста, а его наличие даёт практически неограниченный контроль над страницей пользователя (практически такой же, как и с веб-интерфейса).

Естественно, это накладывает определённые требования к добросовестности пользователей. Любой из вас может обмануть доверчивого друга или соседа, прислав ему ссылку и попросив скопировать ответ (хотя на странице-редиректе и стоит напоминание о том, что ссылку с токеном нельзя никому присылать) либо получив на короткое время доступ к незапароленному компьютеру.

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

Я искренне надеюсь что вы не станете так делать.

Написание простейшей программы с использованием API

Давайте напишем какую-нибудь полезную программу, использующую API ВКонтакте.

Вот пример такой программы, предназначенной для своевременного получения обновлений сообщений (к сожалению, после сохранения поста всё форматирование пропадает, потому вместо символов табуляции я буду использовать escape-последовательность \t):

def searchForUser(user_list, ID):

\tfor user in user_list:

\t\tif type(user) is int:

\t\t\treturn user[‘first_name’] + ‘ ‘ + user[‘last_name’] + ‘\n’

\tfor message in message_list:

\t\tif type(message) is int:

\t\t\tif ‘chat_id’ not in message:

\tuser_list = api.users.get(user_ .join(IDS))

\tfor message in message_list:

\t\tif type(message) is int:

\t\tif message[‘read_state’] == 0:

\t\t\tif ‘chat_id’ not in message:

\t\t\t\ttext = text + searchForUser(user_list, message[‘uid’]) + message[‘body’] + ‘\n’

\t\t\t\ttext = text + ‘Сообщение из чата\n’ + message[‘body’] + ‘\n’

\tmessage = api.messages.get(time_offset = 0)

\tif len(message) != 1 and message[1][‘read_state’] == 0:

\t\tprint(‘No new messages!’)

\t\tSendEmail.sendEMail(‘No new messages!’)

Разберём построчно что делает этот код.

В первых трёх строчках мы импортируем необходимые нам модули. Модуль time используется для того, чтобы отправлять процесс в сон. Модуль SendEmail — это пользовательский модуль, предназначенный для отправки сообщений на определённый ящик.

Функция searchForUser(user_list, ID) ищет пользователя по его ID в списке user_list объектов user. Когда она его находит, то возвращает строку с именем и фамилией юзера. Проверка на тип сделана т.к. API ВКонтакте частенько возвращает первым элементом списка объектов длину этого списка.

Фунция checkMessages(message_list) просматривает список сообщений (опять же, пропуская элемент списка, содержащий число сообщений в списке) и формирует список из ID тех юзеров, сообщения которых ещё не прочитаны. Далее по этому списку ID у API запрашивается список юзеров. И наконец потом формируется единая строка, в которой через строчку указан отправитель (полученный функцией searchForUser(user_list, ID)) и текст его сообщения.

Если сообщение был отправлено из чата, то это дополнительно указывается.

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

1) Проверяем, есть ли сообщения и прочтено ли последнее сообщение


2) Если есть, то вытаскиваем функцией checkMessages(message_list) строку вида

Сообщение от юзера 1

Сообщение от юзера 2

Другой Юзер Юзеров

Сообщение от юзера 1

И отправляем её себе на Email функцией SendEmail.sendEMail(text). Вместо отправки на почту можно выводить сообщение в консоль или записывать в файл.

2а) Если сообщений не было, то отправляем уведомление об этом (его цель, в основном, дать вам понять что программа не вылетела из-за какого-нибудь эксепшена).

3) Вызовом time.sleep(600) ждём ещё 10 минут.

Естественно, эта простенькая программа не является верхом совершенства. Изредка вызов API может приводить к поднятию эксепшена, что в данном случае попросту валит всю программу. Кроме того, приложение никак не запоминает что оно уже отправило вам уведомление о неких сообщениях, т.е. если вы не прочтёте новые сообщения, оно вас снова уведомит. И снова. И так до тех пор, пока в очередном вызове не вылетит эксепшен.

Если вы планируете писать своё приложение, обращайте также внимание на ограничения по частоте запросов к API (в конце страницы).

Как создать чат-бота для Telegram с помощью Python

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

Время переходить к делу и узнать наконец, как создавать ботов в Telegram.

Шаг №0: немного теории об API Telegram-ботов

Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?

Ответ очень простой: для чтения сообщений отправленных пользователями и для отправки сообщений назад используется API HTML. Это требует использования URL:

Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, getUpdates , sendMessage , getChat и так далее.

Токен выглядит приблизительно так:

Для выполнения запросов используются как GET, так и POST запросы. Многие методы требуют дополнительных параметров (методу sendMessage , например, нужно передать chat_ >

После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода getME , ответ будет такой:

Если значение ‘ok’ — true, значит запрос был успешным и результат отобразится в поле ‘field’. Если false — в поле ‘description’ будет сообщение об ошибке.

Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .

Тест на знание python

Следующий вопрос: как получать пользовательские сообщения?

Есть два варианта.

Первый — вручную создавать запросы с помощью метода getUpdates . В качестве объекта вы получите массив объектов Update . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр offset .

Второй вариант — использовать webhooks. Метод setWebhook нужно будет применить только один раз. После этого Telegram будет отправлять все обновления на конкретный URL-адрес, как только они появятся. Единственное ограничение — необходим HTTPS, но можно использовать и сертификаты, заверенные самостоятельно.

Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:

  1. Вы не хотите или не можете настраивать HTTPS во время разработки.
  2. Вы работаете со скриптовыми языками, которые сложно интегрировать в веб-сервер.
  3. У бота высокая нагрузка.
  4. Вы меняете сервер бота время от времени.

Метод с Webhook лучше подойдет в таких случаях:

  1. Вы используете веб-языки (например, PHP).
  2. У бота низкая нагрузка, и нет смысла делать запросы вручную.
  3. Бот на постоянной основе интегрирован в веб-сервер.

В этом руководстве будет использоваться метод getUpdates .

Еще один вопрос: как создать зарегистрировать бота?

@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).

По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.

В этом руководстве будет использоваться библиотека pyTelegramBotApi.

Шаг №1: реализовать запросы курсов валют

Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2020.1
requests==2.7.0


Начать стоит с написания Python-скрипта, который будет реализовывать логику конкретных запросов курсов валют. Использовать будем PrivatBank API. URL: https://api.privatbank.ua/p24api/pubinfo?json&exchange&cours >Пример ответа:

Создадим файл pb.py со следующим кодом:

Были реализованы три метода:

  • load_exchange : загружает курсы валют по указанному URL-адресу и возвращает их в формате словаря(dict).
  • get_exchange : возвращает курсы валют по запрошенной валюте.
  • get_exchanges : возвращает список валют в соответствии с шаблоном (требуется для поиска валют во встроенных запросах).

Шаг №2: создать Telegram-бота с помощью @BotFather

Необходимо подключиться к боту @BotFather, чтобы получить список чат-команд в Telegram. Далее нужно набрать команду /newbot для инструкций выбора название и имени бота. После успешного создания бота вы получите следующее сообщение:

Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды /setdescription и /setabouttext ), фото профиля ( /setuserpic ), включить встроенный режим ( /setinline ), добавить описания команд ( /setcommands ). Потребуется использовать две команды: /help и /exchange . Стоит описать их в /setcommands .

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

Шаг №3: настроить и запустить бота

Начнем с создания файла config.py для настройки:

В этом файле указаны: токен бота и часовой пояс, в котором тот будет работать (это понадобится в будущем для определения времени обновления сообщений. API Telegram не позволяет видеть временную зону пользователя, поэтому время обновления должно отображаться с подсказкой о часовом поясе).

Создадим файл bot.py . Нужно импортировать все необходимые библиотеки, файлы с настройками и предварительно созданный pb.py . Если каких-то библиотек не хватает, их можно установить с помощью pip .

Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:

Шаг №4: написать обработчик команды /start

Теперь чат-бот на Python работает и постоянно посылает запросы с помощью метода getUpdates . Параметр none_stop отвечает за то, чтобы запросы отправлялись, даже если API возвращает ошибку при выполнении метода.

Из переменной бота возможно вызывать любые методы API Telegram-бота.

Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :

Как можно видеть, pyTelegramBotApi использует декораторы Python для запуска обработчиков разных команд Telegram. Также можно перехватывать сообщения с помощью регулярных выражений, узнавать тип содержимого в них и лямбда-функции.

В нашем случае если условие commands=[‘start’] равно True , тогда будет вызвана функция start_command . Объект сообщения (десериализованный тип Message ) будет передан функции. После этого вы просто запускаете send_message в том же чате с конкретным сообщением.

Это было просто, не так ли?

Шаг №5: создать обработчик команды /help

Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.

Как видно в примере выше, был использован дополнительный параметр ( reply_markup ) для метода send_message . Метод получил встроенную клавиатуру ( InlineKeyboardMarkup ) с одной кнопкой ( InlineKeyboardButton ) и следующим текстом: “Message the developer” и url=’telegram.me/artiomtb’ .

Код выше выглядит вот так:

Шаг №6: добавить обработчик команды /exchange

Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).

Вот как работает InlineKeyboardButton . Когда пользователь нажимает на кнопку, вы получаете CallbackQuery (в параметре data содержится callback-data ) в getUpdates . Таким образом вы знаете, какую именно кнопку нажал пользователь, и как ее правильно обработать.

Вот как работает ответ /exchange:

Шаг №7: написать обработчик для кнопок встроенной клавиатуры

В библиотеке pyTelegramBot Api есть декоратор @bot.callback_query_handler , который передает объект CallbackQuery во вложенную функцию.

Давайте реализуем метод get_ex_callback :

Метод answer_callback_query нужен, чтобы убрать состояние загрузки, к которому переходит бот после нажатия кнопки. Отправим сообщение send_exchange_query . Ему нужно передать Message и код валюты (получить ее можно из query.data . Если это, например, get-USD, передавайте USD).

Все довольно просто.

Сперва отправим состояние ввода в чат, так чтобы бот показывал индикатор «набора текста», пока API банка получает запрос. Теперь вызовем метод get_exchange из файла pb.py , который получит код валюты (например, USD). Также нужно вызвать два новых метода в send_message: serialize_ex , сериализатор валюты и get_update_keyboard (который возвращает клавиатуре кнопки “Update” и “Share”).

Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.

Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.

У кнопки Share есть параметр switch_inline_query . После нажатия кнопки пользователю будет предложено выбрать один из чатов, открыть этот чат и ввести имя бота и определенный запрос в поле ввода.

Методы serialize_ex и дополнительный serialize_exchange_diff нужны, чтобы показывать разницу между текущим и старыми курсами валют после нажатия кнопки Update .


Как видно, метод serialize_ex получает необязательный параметр diff . Ему будет передаваться разница между курсами обмена в формате <'buy_diff': , 'sale_diff': >. Это будет происходить во время сериализации после нажатия кнопки Update . Когда курсы валют отображаются первый раз, он нам не нужен.

Цукерберг рекомендует:  Javascript - Unexpected token u in JSON at position 0

Вот как будет выглядеть бот после нажатия кнопки USD:

Шаг №8: реализовать обработчик кнопки обновления

Теперь можно создать обработчик кнопки Update . После дополнения метода iq_callback_method он будет выглядеть следующим образом:

Если данные обратного вызова начинаются с get- ( get-USD , get-EUR и так далее), тогда нужно вызывать get_ex_callback , как раньше. В противном случае стоит попробовать разобрать строку JSON и получить ее ключ t . Если его значение равно u , тогда нужно вызвать метод edit_message_callback . Реализуем это:

Как это работает? Очень просто:

  1. Загружаем текущий курс валюты ( exchange_now = pb.get_exchange(data[‘c’]) ).
  2. Генерируем текст нового сообщения путем сериализации текущего курса валют с параметром diff , который можно получить с помощью новых методов (о них дальше). Также нужно добавить подпись — get_edited_signature .
  3. Вызываем метод edit_message_text , если оригинальное сообщение не изменилось. Если это ответ на встроенный запрос, передаем другие параметры.

Метод get_ex_from_iq_data разбирает JSON из callback_data :

Метод get_exchange_diff получает старое и текущее значение курсов валют и возвращает разницу в формате <'buy_diff': , 'sale_diff': >:

get_edited_signature генерирует текст “Updated…”:

Вот как выглядит сообщение после обновления, если курсы валют не изменились:

И вот так — если изменились:

Шаг №9: реализовать встроенный режим

Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).

Обработчик встроенных запросов реализован.

Библиотека передаст объект InlineQuery в функцию query_text . Внутри используется функция answer_line , которая должна получить inline_query_id и массив объектов (результаты поиска).

Используем get_exchanges для поиска нескольких валют, подходящих под запрос. Нужно передать этот массив методу get_iq_articles , который вернет массив из InlineQueryResultArticle :

Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:

Попробуем набрать usd, и результат мгновенно отфильтруется:

Проверим предложенный результат:

Кнопка “Update” тоже работает:

Отличная работа! Вы реализовали встроенный режим!

Выводы

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

Let’s Write a Chat App in Python

Tkinter + sockets in less than 150 lines of code

Not too frequently, you happen to create something astonishingly simple yet fun to use thing, and you just can’t wait to share it with the world.

That’s exactly what happened to me, and indeed I’m here to share how I made a simple chat app with quite concise Python code. What’s more; I’ve implemented the code without any third party dependencies! So let’s just dive in!

First, I created a chat server through which can recieve incoming requests from clients wanting to communicate. For this, I used good ole’ sockets and a bit of multithreading. Using frameworks like Twisted and SocketServer was an option, but that seemed to be an overkill to me for a software as simple as ours.

The Server

Here’s how we begin our server script (for this app, there are just two scripts: one for server and another for client):

We will be using TCP sockets for this purpose, and therefore we use AF_INET and SOCK_STREAM flags. We use them over UDP sockets because they’re more telephonic, where the recipient has to approve the incoming connection before communication begins, and UDP sockets are more post-mail sort of thing (anyone can send a mail to any recipient whose address s/he knows), so they don’t really require an establishment of connection before communication can happen. Clearly, TCP suit more to our purpose than UDP sockets, therefore we use them. You can know more about sockets here.

After imports, we set up some constants for later use:

Now, we break our task of serving into accepting new connections, broadcasting messages and handling particular clients. Let’s begin with accepting connections:

This is just a loop that waits forever for incoming connections and as soon as it gets one, it logs the connection (prints some of the connection details) and sends the connected client a welcome message. Then it stores the client’s address in the addresses dictionary and later starts the handling thread for that client. Of course, we haven’t yet defined the target function handle_client() for that, but here’s how we do it:

Naturally, after we send the new client the welcoming message, it will reply with the name s/he wants to use for further communication. In the handle_client() function, the first task we do is we save this name, and then send another message to the client, regarding further instructions. After this comes the main loop for communication: here we recieve further messages from the client and if a message doesn’t contain instructions to quit, we simply broadcast the messsage to other connected clients (we’ll be defining the broadcast method in a moment). If we do encounter a message with exit instructions (i.e., the client sends a ), we echo back the same message to the client (it triggers close action on the client side) and then we close the connection socket for it. We then do some cleanup by deleting the entry for the client, and finally give a shoutout to other connected people that this particular person has left the conversation.

Now comes our broadcast() function:

This is pretty much self-explanatory; it simply sends the msg to all the connected clients, and prepends an optional prefix if necessary. We do pass a prefix to broadcast() in our handle_client() function, and we do it so that people can see exactly who is the sender of a particular message.

That was all the required functionalities for our server. Finally, we put in some code for starting our server and listening for incoming connections:


We join() ACCEPT_THREAD so that the main script waits for it to complete and doesn’t jump to the next line, which closes the server.

This completes our server script, which is presented in the following gist (for those who’re reading this on smartphones, visit this link for the complete server code):

The Client

This is more fun beause we’ll be writing a GUI! We use Tkinter, Python’s “batteries included” GUI building tool for our purpose. Let’s do some imports first:

Now we’ll write functions for handling sending and receiving of messages. We start with receive:

Why an infinite loop again? Because we’ll be receiving messages quite non-deterministically, and independent of how and when we send the messages. We don’t want this to be a walkie-talkie chat app which can only either send or receive at a time; we want to receive messages when we can, and send them when we want. The functionality within the loop is pretty straightforward; the recv() is the blocking part. It stops execution until it receives a message, and when it does, we move ahead and append the message to msg_list . We will soon define msg_list , which is basically a Tkinter feature for displaying the list of messages on the screen.

Next, we define the send() function:

We’re using event as an argument because it is implicitly passed by Tkinter when the send button on the GUI is pressed. my_msg is the input field on the GUI, and therefore we extract the message to be sent usin g msg = my_msg.get() . After that, we clear the input field and then send the message to the server, which, as we’ve seen before, broadcasts this message to all the clients (if it’s not an exit message). If it is an exit message, we close the socket and then the GUI app (via top.close() )

We define one more function, which will be called when we choose to close the GUI window. It is a sort of cleanup-before-close function and shall close the socket connection before the GUI closes:

This sets the input field to and then calls send() , which then works as expected. Now we start building the GUI, in the main namespace (i.e., outside any function). We start by defining the top-level widget and set its title:

Then we create a frame for holding the list of messages. Next, we create a string variable, primarily for storing the value we get from the input field (which we shall define soon). We set that variable to «Type your messages here.» to prompt the user for writing their message. After that, we create a scrollbar for scrolling through this message frame. Here’s the code:

Now we define the message list which will be stored in messages_frame and then pack in (at the appropriate places) all the stuff we’ve created till now:

After this, we create the input field for the user to input their message, and bind it to the string variable defined above. We also bind it to the send() function so that whenever the user presses return, the message is sent to the server. Next, we create the send button if the user wishes to send their messages by clicking on it. Again, we bind the clicking of this button to the send() function. And yes, we also pack all this stuff we created just now. Furthermore, don’t forget to make use of the cleanup function on_closing() which should be called when the user wishes to close the GUI window. We do that by using the protocol method of top . Here’s the code for all of this:

(Almost) done. We haven’t yet written code for connecting to the server. For that, we have to ask the user for the server’s address. I’ve done that by simply using input() , so the user is greeted with some command line prompt asking for host address before the GUI begins. It may be a little inconvenient, and you can add GUI for that, but I leave that to you as homework ��. Here’s my code:

Once we get the address and create a socket to connect to it, we start the thread for receiving messages, and then the main loop for our GUI application:

That’s it! We’ve coded our chat application. Again, the complete client script is given in the following gist (and for readers on their smartphones, here’s the link to the gist):

This feels great to be tested on multiple computers. You can, of course, run the server and the client on the same machine for testing (using 127.0.0.1 for HOST in your client), but seeing the communication happen in realtime among different computers feels awesome. The server script will log which IP addresses are accessing it, and the client script will generate a GUI (after asking for the host address) similar to the following screenshots:

Chat — Python Чат (2) Профи Python'a помогите!!!

Краткое описание:
Создание, редактирование и запуск скриптов Python 3.

Порт Python 3 на платформу Android, позволяет просматривать, редактировать и запускать скрипты Python на Android-устройствах. Включает в себя интерпретатор, консоль и редактор .py-файлов.

Возможности:
— Поддержка собственного программного пользовательского интерфейса
— Поддержка многих библиотек Python 3
— Интеграция с SL4A
— Поддержка FTP-серверов, позволяющих передавать проекты Python с ПК на Ваше устройство.

Важно! Данное приложение не совместимо с Python 2, возможна работа только с Python 3! Для работы с Python 2 используйте QPython.

Системные требования: 2.3 и выше
Русский интерфейс: Нет

Сообщение отредактировал iMiKED — 30.05.19, 05:27

Wооdоо, с помощью SL4A, с которым неплохо интегрирован QPython3, можно отправлять сообщения и совершать звонки. Возможна также работа с GPS, камерой, микрофоном. А ещё через тот же SL4A можно создавать приложения с графическим интерфейсом.
Возможностей у этих приложений, особенно, если они работают в паре, очень много :good:

Сообщение отредактировал vanya2000 — 03.02.16, 22:42

Сообщение отредактировал vanya2000 — 07.02.16, 10:07

Не слишком обнаглею, если вместо поисковика, тут спрошу каких именно? а каких нет?

Сообщение отредактировал QreAtop_R3BaCk — 21.06.16, 22:05

Насчёт библиотек. В приложение включены все стандартные питоновские библиотеки. Можно загрузить сторонние в директорию /sdcard/com.hipipal.qpyplus/lib/python3.2/site-packages
Также возможна установка через PIP. Для этого запустите скрипт «pip_console.py» и введите команду

V1.0.0 (2020/10/24)
Big update you shouldn’t skip. It’s QPython3’s version 1.0.0!
Add share to QPython3’s script in android
Move the directory from /sdcard/com.hipipal.qpyplus to /sdcard/qpython
Fix pip not working
Fix editor’s setting crash
Some functions improve and bugs fix

Сообщение отредактировал tvtmonster — 26.10.16, 09:34

awtk7,
Какие модули импортируете?
И какие ошибки появляются?

Для работы с файлами нужно указывать полный путь к файлу от корня ФС.
Например: /sdcard/file.txt или если файл находится в стандартной папке со скриптами, то: /sdcard/qpython/scripts3/file.txt
Пока что только так работает)

У вас код для отображения GUI в программе написан?

Сообщение отредактировал xepconec — 01.11.16, 15:36

(puma333),
есть книга на английском языке «Pro Android Python with SL4A». Однако мне было лень её читать, и я просто посмотрел, как работает файл test.py в SL4A и стал делать свои мини-программки :)
Впрочем, SL4A — уже устаревшая технология. Достаточно сказать, что он плохо работает (или вообще не работает) на устройствах с Android 5.0 и выше. Поэтому, если Вы хотите писать на Python под Android, советую присмотреться к фреймворку Kivy, он более современный и у него больше возможностей (можно даже собирать приложения в APK и выкладывать в Google Play).

Цукерберг рекомендует:  Пишем Python-программу для тестирования SQL-запросов и создаем для нее .exe

Explay84,
странно, не встречал такого на своих аппаратах. Выдаёт ли программа ещё какую-нибудь информацию об ошибке?


QPython3 1.0.1
Что нового:
V1.0.1(2020/3/8)

+ Add privacy policy link

+ Add root mode support (which allows you run qpython script with root privilege)

You can enable it through the following steps:

1 You should have a rooted mobile

2 Enable Root mode in setting page and restart app

3 Now you can enter the console with root privilege or run the console scripts/projects with root privileges

Мда, беспонтовое обновление :nea:

Лучше бы версию самого интерпретатора обновили))

питон чат с помощью опроса

Мне нужно, чтобы встроенный питон чат, и я укладываюсь в очень конечной стадии. Я построил сервер и клиент, и у меня есть следующие проблемы при выполнении кода:

  • server.py 127.0.0.1 -в отдельного окна client.py 127.0.0.1 клиент -типа своего-прозвищ в чате для клиентов, так и получить правильный ответ «яппи», означающие вас связан
  • клиент пытается говорить
  • Сообщение не прочитано другим клиентом, пока он не печатает что-то, после печати он получит сообщение, напечатанное на его экране правильно.

Я хотел бы получить сообщение, не будучи обязан напечатать что-то, это довольно нереально . Код клиента и сервера находятся ниже в 2-х различных классов. Спасибо!

stream-chat-python-cli 0.0.2

pip install stream-chat-python-cli Copy PIP instructions

Last released: May 2, 2020

CLI for Stream Chat

Statistics

View statistics for this project via Libraries.io, or by using Google BigQuery

Maintainers

Classifiers

  • Development Status
    • 5 — Production/Stable
  • Intended Audience
    • Developers
    • System Administrators
  • Natural Language
    • English
  • Operating System
    • OS Independent
  • Programming Language
    • Python :: 3
    • Python :: 3.4
    • Python :: 3.5
    • Python :: 3.6
    • Python :: 3.7
  • Topic
    • Software Development
    • Software Development :: Libraries :: Python Modules


Project description

Setup for development

after this stream-cli is available and changes to cli.py will reflect immediately.

Project details

Statistics

View statistics for this project via Libraries.io, or by using Google BigQuery

Maintainers

Classifiers

  • Development Status
    • 5 — Production/Stable
  • Intended Audience
    • Developers
    • System Administrators
  • Natural Language
    • English
  • Operating System
    • OS Independent
  • Programming Language
    • Python :: 3
    • Python :: 3.4
    • Python :: 3.5
    • Python :: 3.6
    • Python :: 3.7
  • Topic
    • Software Development
    • Software Development :: Libraries :: Python Modules

Release history Release notifications

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Chat — Python Чат (2) Профи Python'a помогите!!!

We recommend upgrading to the latest Google Chrome or Firefox.

Join GitHub today

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

New pull request

Clone with HTTPS

Use Git or checkout with SVN using the web URL.

Downloading .

Want to be notified of new releases in uhbif19/python-local-chat ?

Launching GitHub Desktop .

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop .


If nothing happens, download GitHub Desktop and try again.

Launching Xcode .

If nothing happens, download Xcode and try again.

Launching Visual Studio .

Permalink

Консольный чат работающий на одной машине. Возможно запустить несколько копий чата и переписываться между ними.

Приложение работает под Windows и Linux. Требуется Python версии не меньше 3.4.

Чат-клиенты переписываются через сокеты, для потоков приема/передачи сообщений используется тред-пул.

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

Приложение не блокирует файл со списком пиров. Из-за этого, в принципе, возможна ошибка. Если быстро создавать новые клиенты, то они будут записывать в файл параллеельно, и не узнают о существовании друг-друга.

Комьюнити программистов: что нужно знать о Python-сообществах

23 августа, 2020 |

Любовь Белоконь
Любовь Белоконь
Получайте новые статьи на e‑mail

Пишем о будущем, технологиях и стартапах

«Python — язык программирования, созданный сообществом»
Гвидо Ван Россум, создатель Python

«Опять сломалось» — типичная ситуация для разработчиков. Если поиск в Google бесполезен, документация и Stack Overflow молчат, а известные способы починки не работают, программист идёт за помощью в сообщество. Это может быть чат, форум, группа — место, где тебя выручат и потроллят. Живое комьюнити особенно важно для начинающих программистов. Поэтому вместе с Никитой Соболевым, преподавателем курса по программированию на Python, дорогая редакция #tceh сделала обзор полезных и интересных сообществ для новичков и профи.

Одно из самых сильных IT-сообществ сложилось вокруг языка Python. Для тех, кто только собирается учиться программировать или уже вовсю кодит, это важно. Потому что развитое комьюнити даёт ряд крутых преимуществ:

Спасибо, что живой
Активное сообщество определяет развитие языка в целом. Для крупных корпораций это показатель надёжности с точки зрения бизнеса. YouTube, Reddit, Quora, Spotify не боятся делать свои продукты на Python. Не говоря о небольших компаниях. А значит, пока их бизнес развивается, спрос на питонистов продолжит расти.

Не знаю, как это сделать
Когда не получается, нужно копать, читать и пробовать. Бывает, что неделю не двигаешься с места. Ускорить этот процесс помогает сообщество. Важно вести себя адекватно: чётко объяснить проблему и показать, что вы предприняли не одну попытку её решить. За ошибки вас не прогонят. Прогонят за просьбы о готовом решении.

О, да ты шаришь!
Сообщество — это общение с близкими по духу. С теми, кто так же ошибается и так же выходит из положения. Как правило, активные участники одни и те же — они могут дружить годами, даже не зная настоящих имён друг друга. «Я бы не стал тем, кем стал, если бы в Python-комьюнити не было такого количества невероятных людей», — пишет Армин Ронахер, автор фреймворка Flask.

А давай вместе?
В сообществе легко найти тех, с кем можно объединиться в команду по работе над проектом. Бесплатно. Потому что интересно и нарабатывается опыт.

Python-сообщества можно поделить на онлайн и оффлайн. Те же люди и там, и там, различается только формат.

В онлайне

Конечно, кодерам и удобнее, и проще общаться в онлайне. Чаще всего это мейллисты, чаты, форумы, соцсети и UGC-сообщества типа Habrahabr/Geektimes.

Maillist — наиболее важный способ общения в Python-сообществе, где обсуждаются новые фишки языка и принимаются основные решения. На mail.python.org собраны все публичные списки питонистов.

Gitter — система мгновенных сообщений и чат-комнат для разработчиков. Читайте подборку лучших каналов и выбирайте по направлению и душе.

Slack — онлайн-сервис для ведения переписки с коллегами и единомышленниками.

  • • Python Developers — живое комьюнити в социальных сетях; 2000 человек.
  • • Python.ru — общение в различных каналах: общий, флуд, помощь, работа, ивенты; 1000 человек.

Facebook-группы не очень заточены под решение целей сообщества как такового. Годных примеров мало, но мы нашли:

  • • Англоязычная группа в Facebook PythonDevelopers. Сюда кидают ссылки на профильные новости, полезные материалы и видео. И обсуждают всё это комментариях.
  • • Группа Moscow Python в Facebook — много интересных вакансий и анонсов мероприятий для питонистов.

Telegram. Раньше была популярна IRC, теперь более живая среда — в Telegram-чатах. Из минусов: нет комнат для тесного общения и слабая модерация.

  • • Python_beginners — для новичков, где не побьют за глупый вопрос.
  • • Python — популярный Telegram-чат в российском сообществе: больше 1000 человек. Для прошаренных ребят.
  • • rupython — чатик поменьше, но принципиальной разницы нет.
  • • RudePython — грубый чат без обиняков.
  • • Два одноимённых чата по Django: первый и второй.
  • • Программисты — для общения о различных языках программирования.


Форумы.Вот популярные форумы и порталы для питонистов:

  • • Stack Overflow — крупнейший сайт формата «вопрос-ответ» для программистов.
  • • Python.su — для знакомств, обсуждения новых фич и взаимопомощи.
  • • Cyberforum — здесь тоже общение и решение задачек.
  • • Reddit — формат тот же, но на английском языке.
  • • Python Дайджест — портал, где новости о Python собираются коллективными усилиями на совершенно безвозмездной основе. Каждый желающий может добавить ссылку на релевантную новость или проект и таким образом помочь проекту.
  • • Тостер — можно задавать вопросы в духе «А что почитать?», «А накидайте задачки», «Как распределить время при обучении?», «Сколько можно заработать?».

Хабр. На Хабре по хабу Python можно найти уйму полезного: от книг до нетривиальных кодерских решений. Можно отфильтровать материалы и медитировать на них.

Hello, world

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

Moscow Python — объединяет российское Python-комьюнити. Это встречи, мастер-классы, обучение начинающих питонистов и большая конференция Moscow Python Conf. 24 августа пройдёт очередной митап, не пропустите. Здесь набираются опыта и знакомятся с классными людьми, находят работу или тренируются в публичных выступлениях.

Пример. Сейчас Владимир Филонов руководит компанией ITCanFly. Всё началось в 2012 году, когда он впервые посетил мероприятие для программистов. Это была встреча Moscow Python (тогда Moscow Django), где Владимир познакомился с человеком, который пригласил его на позицию CTO музыкального стартапа. Вдохновившись духом сообщества, Филонов из разработчика превратился в евангелиста — стал тем, кто движет вперёд российское Python-сообщество. К примеру, именно Владимир придумал провести мастер-классы по программированию для девушек Django Girls, которые проходили в #tceh.

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

Pycon проводят и в России, обычно за городом, куда съезжаются питонисты и приглашённые иностранные докладчики . Последняя конференция прошла 3-4 июля в Подмосковье, объединив 350 участников со всей страны.

Яндекс тоже собирает мероприятия и конференции для питонистов. Следите за расписанием новых событий и смотрите записи старых.

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

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

Chat — Python Чат (2) Профи Python'a помогите!!!

Краткое описание:
Создание, редактирование и запуск скриптов Python 3.

Порт Python 3 на платформу Android, позволяет просматривать, редактировать и запускать скрипты Python на Android-устройствах. Включает в себя интерпретатор, консоль и редактор .py-файлов.

Возможности:
— Поддержка собственного программного пользовательского интерфейса
— Поддержка многих библиотек Python 3
— Интеграция с SL4A
— Поддержка FTP-серверов, позволяющих передавать проекты Python с ПК на Ваше устройство.

Важно! Данное приложение не совместимо с Python 2, возможна работа только с Python 3! Для работы с Python 2 используйте QPython.

Системные требования: 2.3 и выше
Русский интерфейс: Нет

Сообщение отредактировал iMiKED — 30.05.19, 05:27

Wооdоо, с помощью SL4A, с которым неплохо интегрирован QPython3, можно отправлять сообщения и совершать звонки. Возможна также работа с GPS, камерой, микрофоном. А ещё через тот же SL4A можно создавать приложения с графическим интерфейсом.
Возможностей у этих приложений, особенно, если они работают в паре, очень много :good:

Сообщение отредактировал vanya2000 — 03.02.16, 22:42

Сообщение отредактировал vanya2000 — 07.02.16, 10:07

Не слишком обнаглею, если вместо поисковика, тут спрошу каких именно? а каких нет?

Сообщение отредактировал QreAtop_R3BaCk — 21.06.16, 22:05

Насчёт библиотек. В приложение включены все стандартные питоновские библиотеки. Можно загрузить сторонние в директорию /sdcard/com.hipipal.qpyplus/lib/python3.2/site-packages
Также возможна установка через PIP. Для этого запустите скрипт «pip_console.py» и введите команду

V1.0.0 (2020/10/24)
Big update you shouldn’t skip. It’s QPython3’s version 1.0.0!
Add share to QPython3’s script in android
Move the directory from /sdcard/com.hipipal.qpyplus to /sdcard/qpython
Fix pip not working
Fix editor’s setting crash
Some functions improve and bugs fix

Сообщение отредактировал tvtmonster — 26.10.16, 09:34

awtk7,
Какие модули импортируете?
И какие ошибки появляются?

Для работы с файлами нужно указывать полный путь к файлу от корня ФС.
Например: /sdcard/file.txt или если файл находится в стандартной папке со скриптами, то: /sdcard/qpython/scripts3/file.txt
Пока что только так работает)

У вас код для отображения GUI в программе написан?

Сообщение отредактировал xepconec — 01.11.16, 15:36

(puma333),
есть книга на английском языке «Pro Android Python with SL4A». Однако мне было лень её читать, и я просто посмотрел, как работает файл test.py в SL4A и стал делать свои мини-программки :)
Впрочем, SL4A — уже устаревшая технология. Достаточно сказать, что он плохо работает (или вообще не работает) на устройствах с Android 5.0 и выше. Поэтому, если Вы хотите писать на Python под Android, советую присмотреться к фреймворку Kivy, он более современный и у него больше возможностей (можно даже собирать приложения в APK и выкладывать в Google Play).

Explay84,
странно, не встречал такого на своих аппаратах. Выдаёт ли программа ещё какую-нибудь информацию об ошибке?

QPython3 1.0.1
Что нового:
V1.0.1(2020/3/8)

+ Add privacy policy link

+ Add root mode support (which allows you run qpython script with root privilege)

You can enable it through the following steps:

1 You should have a rooted mobile

2 Enable Root mode in setting page and restart app

3 Now you can enter the console with root privilege or run the console scripts/projects with root privileges

Мда, беспонтовое обновление :nea:

Лучше бы версию самого интерпретатора обновили))

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md Поправленна работа под Windows. Улучшено качество кода. Sep 14, 2020