Category: Programmazione

Convertire un file OGG in WAV con Python

Avevo la necessità (all’interno di un progetto più ampio di cui vi parlerò in seguito) di convertire un file audio OGG in un file WAV. Dopo una lunga ricerca su internet (e in particolare su GitHub) ho trovato la libreria PyDub. Per l’installazione della libreria ho utilizzato, per la prima volta, direttamente i file di progetto prelevati direttamente da GitHub.

Quindi come prima cosa ho scaricato la libreria con il seguente comando:

git clone https://github.com/jiaaro/pydub.git

sono entrato nella cartella che si è creata (nella cartella documenti) e ho lanciato il seguente comando:

sudo python3 setup.py install

per sicurezza ho installato anche delle librerie aggiuntive per essere sicuro di avere a disposizione le librerie per poter gestire i vari formati audio installando il pacchetto ffmpeg con il seguente comando:

sudo apt-get install ffmpeg libavcodec-extra

Ed ecco il programma in python che, con 3 righe, permette di convertire un file audio.

from pydub import AudioSegment
file_ogg = AudioSegment.from_ogg("input.ogg")
file_handle = file_ogg.export("output.wav", format="wav")


Permanent link to this article: http://www.andrea.rustichelli.name/convertire-un-file-ogg-in-wav-con-python/

Dove mi trovo? Un aiuto inaspettato dal Python

A volte capita di svegliarsi dopo una serata intensa e non sapere dove ci si trova. A questo viene in aiuto il sito geoPlugin che offre molti servizi legati alla geo localizzazione. In particolare ho trovato simpatico il servizio che, data la latitudine e la longitudine, fornisce, tramite un oggetto json, l’elenco di alcune località vicine a noi e con informazioni utili come ad esempio la distanza in miglia e kilometri e la direzione.

Questo è un esempio di url da lanciare per avere un’idea dell’output che viene prodotto:

http://www.geoplugin.net/extras/nearby.gp?lat=44.6983&lon=10.6312&format=json

Il passo successivo è stato quello di scrivere un programma in python per gestire l’output. Questo programma non prevede la modifica delle coordinate geografiche in input, se non modificando il sorgente del programma prima della sua esecuzione, però è solamente un primo passo verso qualcosa di più evoluto (ad esempio un bot Telegram).

Infatti ho trovato delle difficoltà nella formattazione corretta del tracciato json di output e della sua successiva gestione tramite la libreria json di python. Ho risolto questo problema convertendo l’output in formato UTF-8.

Molto utile anche l’utilizzo del ciclo for per la lettura dei dati json e degli elementi in esso contenuti.

Riporto di seguito il codice funzionante… andrebbe migliorato… ma funziona.

Permanent link to this article: http://www.andrea.rustichelli.name/dove-mi-trovo-un-aiuto-inaspettato-dal-python/

Roger… il primo bot per Telegram scritto in Python

Partiamo con il primo bot per Telegram scritto in python.

Come prima cosa utilizzare il bot BotFather di Telegram per creare un nuovo bot e copiare il codice di attivazione che dovrà essere inserito nel codice del programma.

Questo bot farà una cosa molto semplice, ovvero analizza il formato del messaggio digitato e non farà altro che riproporlo nel formato:

Roger... TESTO DIGITATO SU TELEGRAM... passo...

Oltre ad interagire direttamente all’interno di Telegram, il programma visualizzaerà anche i messaggi digitati all’interno della finestra dove lo script è in esecuzione.

Anticipo che Telegram può essere scaricato per qualsiasi piattaforma compreso iOS e Linux… in questo modo è possibile utilizzare dispositivi più comodi rispetto al solito smartphone.

Qui di seguito è riportato il testo funzionante di questo primo e semplice bot.

import time
import telepot
import json
from telepot.loop import MessageLoop

def handle(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
print(content_type, chat_type, chat_id)

if content_type == 'text':
text = msg['text']
bot.sendMessage(chat_id, 'Roger... ' + text + '...passo...')
print(msg["from"] ["first_name"] + " ha scritto " + msg["text"])

bot = telepot.Bot('COPIARE_CODICE_ATTIVAZIONE_BOT')
MessageLoop(bot, handle).run_as_thread()
print('BOT in ascolto ...')
# Questo ciclo itera il programma (agisce come un processo sempre attivo)
while 1:
time.sleep(10)

Questa è una schermata tratta da Telegram (questa è la versione per linux)

e questo è lo stesso output che si può leggere nella console.

Permanent link to this article: http://www.andrea.rustichelli.name/roger-il-primo-bot-per-telegram-scritto-in-python/

Telegram… vieni a me

Voglio programmare un Bot in Telegram usando il linguaggio Python. Queste sono le premesse.

Ovviamente occorre installare Python e un editor sulla macchina.  Successivamente è necessario installare la libreria TELEPOT (per interfacciarsi con le API di Telegram) e PPRINT per avere delle funzionalità aggiuntive sulla scrittura dei messaggi.

Entrambe le librerie le ho installate con il comando:

sudo easy_install3 telepot
sudo easy_install3  pprint

Per l’installazione delle librerie Python preferisco utilizzare il programma easy_install al posto di pip perchè con pip su Linux Mint 18.3 ottengo sempre dei messaggi di errore.

Apro IDLE (un veloce e leggero IDE per Python) e scrivo i seguenti comandi :

import telepot [con questa istruzione importiamo la libreria 'telepot' per gestire il bot]

bot = telepot.Bot('***** PUT YOUR TOKEN HERE *****') [richiamo il bot utilizzando 
il token associato al bot]

bot.getMe() [eseguo la funzione per visualizzare i dati principali del bot]

Ecco quello che viene visualizzato:

Se visualizziamo un testo come quello sopra riportato significa che ci siamo correttamente collegati al nostro Bot di Telegram che, in questo caso, si chiama zaccabot.

Permanent link to this article: http://www.andrea.rustichelli.name/telegram-vieni-a-me/

Atom per la programmazione in Python

Ok, decido di iniziare a smanettare un po’ più seriamente con il Python. La prima cosa di cui ho bisogno (e qui rimembro i bei tempi andati quando la Borland sviluppava degli IDE fotonici) è un buon editor… completo ma non troppo complicato visto che voglio dedicarmi alla programmazione e non alla configurazione dell’editor.
Dopo un paio di installazioni fatte seguendo suggerimenti trovati su internet, decido di installare l’editor Atom.
La cosa migliore da fare è andare sul sito https://atom.io/ e scaricare il pacchetto di installazione .DEB… al termine del download viene eseguito il programma di gestione di questo tipo di pacchetti e l’installazione viene completata con successo.

Una volta terminata l’installazione, è necessario installare alcuni package per aggiungere delle funzionalità all’editor. Per installare i package è necessario andare nel menù Edit – Preferences e poi, nella finestra Settings che si apre nella parte centrale dell’editor, è necessario andare nella sezione Install.

Ho deciso di installare i seguenti package:
– atom-python-run: questo permette di eseguire il codice scritto in python. Ho scelto questo package perchè è veloce da configurare per l’utilizzo con il python3 (come da schermata sotto riportata) e consente di eseguire il codice tramite 2 tasti funzione (F5 e F6).

– autocomplete-python: per avere suggerimenti durante la scrittura del codice in python.

– minimap: per visualizzare sulla destra una anteprima del testo che è possibile scorrere per raggiungere velocemente la parte di programma selezionata. E’ molto comoda per i programmi molto lunghi, ma è comunque una figata anche per gli script più corti.

– file-icons: per visualizzare, nell’albero di progetto, i file con una icona che rappresenta il contenuto. Questa funzione, oltre a migliorare il look & feel permette di rendere più agevole individuare i file in progetti con molti file.

E adesso non rimane che iniziare a scrivere un po’ di codice.

Permanent link to this article: http://www.andrea.rustichelli.name/atom-per-la-programmazione-in-python/

Ottenere info sul sistema linux tramite un programma Bash

Mi capita a volte di avere la necessità di recuperare informazioni sul sistema operativo linux e su altre informazioni legate al sistema e alla rete. Visto che non mi ricordo sempre tutti i comandi (considerato che lo uso solo nel tempo libero) ho scritto un programma bash da lanciare. Un volta eseguito (se non vengono forniti parametri in input) il programma visualizza le tipologie di informazioni e poi, una volta fatta la scelta, vengono mostrate le informazioni richieste. E’ anche possibile eseguire il programma passando direttamente il numero corrispondente all’opzione desiderata. Fin che c’ero ho cercato di utilizzare i principali costrutti come l’if e il case.

#!/bin/bash

if [ $# -eq 0 ]; 
then 
#se non è stato passato il parametro viene visualizzato il menù con
#le opzioni
echo "################################################"
echo "# Visualizza le info del sistema e dell'utente #"
echo "# 1 - Informazioni dal 'printenv'              #"
echo "# 2 - Informazioni generiche sul sistema       #"
echo "# 3 - Informazioni di rete                     #"
echo "# 4 - Informazioni sulla release               #"
echo "# 5 - Informazioni sulla CPU                   #"
echo '# 6 - Varie                                    #'
echo "################################################"
read -p "Scegli l'opzione:" OPZ
else 
#altrimenti il parametro passato viene messo nella varibile di scelta
OPZ=$1
fi

case $OPZ in
1) 
clear 
echo "---===] Informazioni dal 'printenv' [===---"
printenv|grep SHELL
printenv|grep USER
printenv|grep DESKTOP_SESSION
printenv|grep LANG
printenv|grep CINNAMON_SESSION
printenv|grep HOME
;;
2) 
clear
echo "---===] Informazioni generiche sul sistema [===---"
echo "Nome host: "`uname -n`
echo "Sistema basato su: "`uname -s`
echo "Sistema operativo: "`uname -o`
echo "Kernel release: "`uname -r`
echo "Kernel version: "`uname -v`
;;
3)
clear
echo "---===] Informazioni di rete [===---"
echo "Nome host: "`hostname`
echo "Indirizzo IP: "`hostname -i`
echo "Indirizzo IP internet: "`hostname -I`
;;
4)
clear
echo "---===] Informazioni sulla release [===---"
echo "Distribuzione: "`lsb_release -is`
echo "Descrizione: "`lsb_release -ds`
echo "Numero di release: "`lsb_release -rs`
echo "Nome in codice della release: "`lsb_release -cs`
;;
5)
clear
echo "---===] Informazioni sulla CPU [===---"
cat /proc/cpuinfo|grep vendor_id |uniq
cat /proc/cpuinfo|grep 'model name' |uniq
cat /proc/cpuinfo|grep 'cache size' |uniq
lscpu|grep Architecture
lscpu|grep 'CPU op-mode'
lscpu|grep 'CPU(s)'|head -1
;;
6)
clear
echo "---===] Varie [===---"
ls -l /usr/share/xsessions/
;;
esac

Permanent link to this article: http://www.andrea.rustichelli.name/ottenere-info-sul-sistema-linux-tramite-un-programma-bash/