Interact with discourse from Python?

Hi everyone! Love discourse, it’s the backbone of our community.

We are an open source project with a strong presence on Github. We have a robot written in Python which manages our Github repositories and does things like merge pull requests automatically if they have been approved. Since we have a lot of repositories and not everyone follows every repository it would be awesome if the robot could post in the forums when a new project is created or when a pull request needs to be reviewed.

Can anyone point me in the direction of how I could best call the Discourse API from Python?

3 curtidas

There is a python discourse api library that is a few years old:

https://github.com/tindie/pydiscourse

And a forked version that has been updated somewhat recently:

https://github.com/bennylope/pydiscourse

Hopefully the latter one will work for you.

Also this plugin may be of interest to you:

https://meta.discourse.org/t/the-github-linkback-plugin/66081

7 curtidas

Thanks @blake! That is exactly the kind of thing I needed to get started.

I will report back with my successes.

2 curtidas

I recently started a project for this, and am actively updating it. Currently working towards the next dot release:

https://github.com/samamorgan/discourse

10 curtidas

Did it work out for you? I am trying this as well. I keep getting “DiscourseClientError: Payload Too Large”.

1 curtida

I’m suddenly seeing this error too over the weekend when attempting to fetch a topic. This topic fetch code hasn’t changed in over a year, so something about the API must have changed. I’m investigating.

2 curtidas

Payload Too Large is because of this change.

I don’t know about the project mentioned above, but here is the status for bennylope’s project. Maybe the same fix is needed on other wrappers as well.

https://github.com/bennylope/pydiscourse issue #38 fixes the problem, but the fixed version has not yet been pushed to pypi- https://github.com/bennylope/pydiscourse/issues/38. Waiting for github @bennylope to do it. So you can wait for pypi to be updated, or git pull master.

5 curtidas

Thanks! This worked. I uninstalled pydiscourse, and used a local copy based on what you suggested. And now, it works!
I am trying to use Python’s Sentiment analyzer to get a sentiment analysis of the latest posts. I will keep you updated on how it goes.

1 curtida

Is anybody else using this? Are you able to get more than 20 posts per topic using this?

1 curtida

You probably need to use pagination. I haven’t tried this for posts specifically, but something like:

pagesize = 20
for page in range(100):
    client.posts(topic_id, limit=pagesize, offset=page*pagesize)
3 curtidas

Sim, sei que esta é uma postagem antiga, mas como essencialmente é o que procuro, não faz sentido criar uma nova postagem quando esta funciona, mas precisa ser atualizada.

Embora eu saiba programar em muitas linguagens de programação, sinto dizer que Ruby não é uma delas. Estava me perguntando se existem respostas mais novas ou melhores para esta pergunta.

Interagir com o Discourse a partir do Python?


Como uma pergunta secundária, os plugins e/ou temas do Discourse podem ser criados usando Python?

1 curtida

Temas, definitivamente não, isso é apenas Javascript, CSS e HTML.

Plugins: Mais ou menos.

Você pode importar módulos Python para um plugin Discourse baseado em Ruby (on Rails) e chamar funções Python usando Pycall: GitHub - red-data-tools/pycall.rb: Calling Python functions from the Ruby language

Eu o uso em Produção para um propósito muito específico, pois não há módulo equivalente mantido no ecossistema RoR, então isso me evita ter que traduzir e depois manter todo esse código especializado em Ruby.

Funciona surpreendentemente bem.

Dito isso, a base desse Plugin ainda é escrita em Ruby.

Eu recomendaria que você simplesmente aprendesse Ruby on Rails também - é realmente uma linguagem muito agradável e, na minha opinião, o código é mais agradável de ler do que Python :slight_smile:

Eu também deveria reservar um tempo para aprender mais Python se/quando for necessário.

Nota secundária interessante: parte do código em Discourse Chatbot 🤖 que cria o comportamento do agente foi baseado em um agente Python chamado “Funkagent”, que eu primeiro traduzi para Ruby on Rails (e depois modifiquei, aprimorei.). Portanto, a tradução pode ser uma opção, é claro, se fizer sentido. Nesse caso, fez sentido.

3 curtidas

Obrigado.

Essa é uma resposta razoável e uma opção possível que manterei em consideração.

1 curtida

Escrevi vários scripts de importação antes de realmente “aprender” Ruby. Dependendo do que você quer fazer, você pode ser capaz de fazer mais com suas habilidades atuais do que pensa. Provavelmente é mais fácil usar Ruby do que descobrir como usar outra coisa.

No entanto, se você estiver interagindo com a API, pode usar qualquer linguagem que quiser.

5 curtidas

Ruby é lindamente projetada e muito fácil de aprender, na minha humilde opinião.

Ruby on Rails exige um pouco mais de aprendizado e, como um framework baseado em convenções, pode ser complicado às vezes, mas muito poderoso quando você pega o jeito.

2 curtidas

3 posts foram divididos em um novo tópico: Quão difícil seria para não programadores poderem usar o Discourse AI - bot de IA para ajudá-los a criar plugins e/ou temas

Você pode dar uma olhada em GitHub - discourse/all-the-plugins como uma forma de explorar o que é possível.

Escolha algo que você queira fazer e que pareça simples. Se você quiser algo como o cakeday, que muda a definição de um aniversário, então o cakeday pode ser um bom lugar para começar. Você selecionaria uma pequena coisa que deseja mudar e faria as coisas um passo minúsculo de cada vez.

2 curtidas

hah, estou me ensinando Ruby hoje em dia, que diversão mesmo. :exploding_head:

3 curtidas