Ich möchte twittern, habe aber kein Smartphone oder Computer zur Hand. Es gibt aber feste Telefone. Was ist los?
Selbst in einer solchen Situation haben wir ein System erstellt, mit dem Sie mit einem einzigen Anruf twittern können.
Tun Sie es in einer Linux-Umgebung. Diesmal habe ich Debian mit VPS verwendet.
Es ist nicht erforderlich, eine spezielle Bibliothek zu installieren. Erstellen Sie einfach eine LAMP-Umgebung. Bitte ändern Sie das Verzeichnis im Quellcode entsprechend.
Es scheint, dass Twilio auch Sprache erkennen kann, aber da es kein Japanisch unterstützt, haben wir diesmal die Bing Speech API für die Spracherkennung übernommen.
Holen Sie sich einfach einen Account. Es gibt bezahlte Konten und kostenlose Konten (mit Einschränkungen für Testversionen), aber in diesem Fall konnten wir es mit einem kostenlosen Konto implementieren.
Dieser Bereich ist hilfreich für die Kontoerfassung und den Mechanismus. Twilio First Step
Sie können es von der Seite hier herunterladen.
Sie können den Schlüssel sofort erhalten, indem Sie den Nutzungsbedingungen zustimmen und sich über "API-Schlüssel abrufen" anmelden. Sie können sich auch mit Ihrem Github-Konto anmelden.
Es werden zwei Arten von Schlüsseln ausgegeben, aber es scheint, dass beide verwendet werden können.
Die Verarbeitung auf der Twilio-Seite ist in TwiML und PHP geschrieben, und die andere Verarbeitung ist in Python geschrieben.
Platzieren Sie die folgende XML-Datei an einem Ort, auf den über das Internet zugegriffen werden kann, z. B. auf einem Webserver. Stellen Sie dann die URL auf der Twilio-Kontoseite ein.
record.xml
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-JP">Notieren Sie den Inhalt des Tweets. Drücken Sie nach der Aufnahme auf Scharf.</Say>
<Record method="GET" timeout="60" maxLength="30" finishOnKey="#" action="./get.php" />
</Response>
Diese wenigen Zeilen sprechen automatisch und zeichnen sogar auf. TwiML Es ist gut, weil es leicht zu verstehen und leicht ist. Weitere Informationen finden Sie unter Offizielle Referenz.
Dies ist der Teil von action =" ./ get.php "
, der in <Record>
von TwiML geschrieben ist.
Der Prozess wird nach dem Schließen des Aufrufs an "get.php" übergeben.
get.php
<?php
//URL der Aufnahmedatei abrufen
$recordingUrl = $_GET['RecordingUrl'];
$recordingUrl .= ".wav";
//Aufnahmedatei herunterladen
exec("wget -N -O ./record.wav $recordingUrl");
//Führen Sie Python aus
exec("python ./tweet.py");
?>
Wie Sie in der Referenz sehen können, sendet das Attribut "action" "RecordingUrl" als Parameter.
Sie können es per GET oder POST erhalten. Es ist dasselbe wie HTML und andere Formulare.
Dieses Mal habe ich GET mit der Methode
von TwiML angegeben, also ist es GET.
Beachten Sie, dass abhängig von den Berechtigungseinstellungen der Datei oder des Zielverzeichnisses möglicherweise keine Parameter abgerufen oder Audio nicht gespeichert werden. Ich war ein paar Tage lang besorgt, weil ich die super-super rudimentären Probleme im Zusammenhang mit der Erlaubnis nicht lösen konnte.
Führen Sie nach dem Herunterladen der aufgezeichneten Sprachdatei das Python-Programm aus, um die Spracherkennung → Tweet-Verarbeitung durchzuführen.
Dieser Artikel hat mir geholfen, ein Python-Programm zu erstellen. So konvertieren Sie Twilios Stimme mithilfe der Bing Speech API von Microsoft in Text
Erstellen Sie zunächst settings.py
, um auf den API-Schlüssel für Tweets zu verweisen.
settings.py
CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxx"
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN = "xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
ACCESS_TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Als nächstes folgt ein Programm, das alles von der Spracherkennung bis zu Tweets ausführt.
tweet.py
#coding:utf-8
from requests_oauthlib import OAuth1Session
import json
import settings
import requests
import urllib
#Holen Sie sich Token von der API
def authorize():
url = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"
headers = {
"Content-type": "application/x-www-form-urlencoded",
"Ocp-Apim-Subscription-Key": "Erhaltener Schlüssel"
}
response = requests.post(url, headers=headers)
if response.ok:
_body = response.text
return _body
else:
response.raise_for_status()
#Speichern Sie den erworbenen Token
token = authorize()
#Dateiauswahl
infile = open("record.wav","r")
data = infile.read()
#Werfen Sie zur API und erhalten Sie Ergebnisse
def speech_to_text( raw_data, token, lang="ja-JP", samplerate=8000, scenarios="ulm"):
data = raw_data
params = {
"version": "3.0",
"requestid": "b2c95ede-97eb-4c88-81e4-80f32d6aee54",
"appid": "D4D52672-91D7-4C74-8AD8-42B1D98141A5",
"format": "json",
"locale": lang,
"device.os": "Windows",
"scenarios": scenarios,
"instanceid": "565D69FF-E928-4B7E-87DA-9A750B96D9E3"
}
url = "https://speech.platform.bing.com/recognize?" + urllib.urlencode(params)
headers = {"Content-type": "audio/wav; samplerate={0}".format(samplerate),
"Authorization": "Bearer " + token }
response = requests.post(url, data=data, headers=headers)
if response.ok:
result = response.json()["results"][0]
return result["lexical"]
else:
raise response.raise_for_status()
#Speichern Sie die von der API erfassten Daten
message = speech_to_text(data,token,lang="ja-JP", samplerate=8000, scenarios="ulm")
#settings.Holen Sie sich Token von py
twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET)
#Tweet
params = {"status":"%s"%message}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json",params = params
Wenn Sie die Twilio-Nummer anrufen, wird "Aufzeichnen des Tweet-Inhalts. Drücken Sie nach der Aufnahme Scharf." Angezeigt. Teilen Sie also den Inhalt mit, den Sie twittern möchten. Es wird nach einer Weile getwittert.
Es scheint nicht zu funktionieren, wenn es zu lang oder zu kurz ist.
Es hat vorerst funktioniert, aber es gibt einige Probleme.
Am Ende des Aufrufs wird angezeigt, dass ein Anwendungsfehler aufgetreten ist. Der Fehler wird auch im Twilio-Debugger angezeigt, wurde jedoch nicht behoben.
→ Ich habe es gelöst und einen Artikel geschrieben. Über Systemfehler, mit denen Sie nur telefonisch twittern können
Diesmal war ich ziemlich süchtig nach den rudimentären Berechtigungseinstellungen. Es gibt einige Teile, die ich noch nicht verstanden habe, daher ist ein Studium erforderlich.
Ich bin der Meinung, dass dies nicht gut für die Sicherheit ist, z. B. das gewaltsame Ausführen mit "exec ()" während des Programms. (Befehlsinjektion) Danach ist es notwendig, die Datenübertragung von PHP für CSRF-Maßnahmen zu entwickeln.
Ich möchte den Zugriff auf TwiML einschränken, frage mich aber, ob dies möglich ist.
Aufgezeichnete Dateien bleiben auf Twilio und sammeln sich bei jedem Tweet an. Es scheint, dass es mit der API gelöscht werden kann, so dass es scheint, dass dieses Problem gelöst werden kann.
→ Ich habe ein Programm zum Löschen geschrieben und daraus einen Artikel gemacht. Alle aufgezeichneten Daten mit Twilio löschen
Recommended Posts