Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Як написати бота до Telegram?

with 5 comments

Легко. 🙂 Давайте напишемо бота який перекладатиме нам всяке з німецької:

Приклад діалогу

Для цього нам треба поговорити з botFather-ом:

А зараз трохи не по темі цієї статті. Ось код який перетворює вікідані на словник, шукаючи всі сутності які мають мітки однією мовою, а потім показучи їх мітки іншою мовою, використовуючи хитрий запит SPARQL:

import json
import requests

def translate(from_lang, to_lang, word):
    '''
        Переклдає мітки елементів вікіданих з мови на мову. Повертає список варіантів перекладу
    '''
    res = sparql('''
        SELECT  ?ukLabel WHERE {
          ?item ?label "%s"@%s.
          ?item rdfs:label ?ukLabel filter(lang(?ukLabel) = "%s")
        } LIMIT 10
    ''' % (word, from_lang, to_lang))
    return list(map(
        lambda e: e['ukLabel']['value'],
        res['results']['bindings']
    ))

def sparql(query):
    ''' Отримує JSON дані запиту SPARQL до вікіданих '''
    res = requests.get(
        'https://query.wikidata.org/sparql',
        params={
            'query': query,
            'format': 'json'
        }
    )
    return json.loads(res.text)

А тепер повертаємось до теми телеграмного бота. Аби його написати треба поставити бібліотеку:

pip install pyTelegramBotAPI

Ось її Github: https://github.com/eternnoir/pyTelegramBotAPI

А далі – елементарно як писати консольну програму:

import telebot

TOKEN = '' # тут вставити те що BotFather сказав

bot = telebot.TeleBot(TOKEN)

@bot.message_handler(content_types=["text"]) # Якщо прийдуть нові повідомлення
def respond_to_message(message):
    translations = translate('de', 'uk', message.text) # Отримати переклади тексту повідомленя
    resp = '\n'.join(translations) if translations else 'На жаль, перекладу слова %s не знайдено' % message.text
    bot.send_message( # відправити назад
        message.chat.id, # в той самий чат з якого прийшло (можна напевне й в інший)
        resp
    )

if __name__ == '__main__':
     bot.polling(none_stop=True) # Запустити бота аби той сидів на лінії і слухав повідомлення.

Поки що все, бо й висипатись іноді треба. Пізніше нагадайте мені не забути написати більше про SPARQL, як поставити собі локальну mediawiki і розширення до неї, як логінити сторонні застосунки через OAuth, і як переписати інтерфейс вікіпедії на Vue.js. 🙂

Advertisements

Written by bunyk

Травень 22, 2017 at 01:51

Оприлюднено в Кодерство, Павутина

Tagged with ,

Відповідей: 5

Subscribe to comments with RSS.

  1. Я тут вчу потихеньку румунську і зробив асістів рідер: будь який ньюс артікл можна читати через нього, виділяючи окремі слова чи речення, отримувати їх переклад.

    Наприклад артікл з дойчевелє: https://highlighter.darednaxella.name/read?t=H7KgM&d=uk
    В роботі: https://www.dropbox.com/s/k61m7cf7hdo2mgh/Selection_014.png?dl=0

    Є екстеншн для хрома (для файрфокса теж), можна відправляти статті з будь якого сайту 🙂

    Alexander Shchapov (@darednaxella)

    Травень 22, 2017 at 12:20

    • Ого, то ти майже readlang.com заімплементив. Я все думав про це і думав що мені треба якусь базу яка підтримує алгоритм Ахо Корасик і дозволяє користувачам колаборативно редагувати примітки до документів. Щоб таким чином коли я додам примітку що “Wie bitte?” означає здивоване “Що?”, ця примітка з’явилась у всіх документах платформи. Якось так: https://bunyk.wordpress.com/2013/05/09/rapunzel/

      І огого, ти настільки серйозно переїжджаєш в Румунію? Цікаво було б дізнатись про те як було зроблено такий вибір? А то всі кудись в Каліфорнію або в Океанію їдуть, а тут таке екзотичне місто.

      bunyk

      Травень 24, 2017 at 17:21

      • * місце

        bunyk

        Травень 24, 2017 at 17:21

      • Ох, шо не зробиш, то вже було десь колись і написано 🙂

        Ну та але у мене фрази можна необмежено перекладати скільки захочеш.

        Про Румунію, як тобі сказати, ми з України коли їхали то їхали не щоб втікти десь або виїхати, так склалось з роботою і обставинами. А тепер тут більше люди тримають, друзі. І країна в плані природи гарна. Приїзжай в гості 🙂

        Alexander Shchapov (@darednaxella)

        Травень 24, 2017 at 19:35

        • То ти ще поки що не монетизував. В гості – колись, може. 🙂

          bunyk

          Травень 25, 2017 at 14:31


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: