Hallo. In dieser Serie habe ich Ruby und Sinatra mehrmals verwendet.
Ich möchte einen LINE Bot namens "Honmemo!"
Dieser Artikel ist eine Fortsetzung von Teil 1. Wenn Sie es noch nicht gelesen haben, lesen Sie es bitte!
In diesem Artikel werde ich ein Programm schreiben, das Suchergebnisse mithilfe einer API zurückgibt, die tatsächlich Buchinformationen zurückgibt. Der Programmablauf ist wie folgt.
Dieses Mal verwenden wir "openBD". openBD ist eine API, die von Carlyl Co., Ltd. und dem Verlag dot com betrieben wird. Sie erhalten grundlegende Informationen zu Büchern und Schatten (Fotos auf dem Cover).
https://api.openbd.jp/v1/get?isbn=9784873113944
Wenn Sie isbn wie folgt übergeben, wird ein Array von Buchdaten im JSON-Format zurückgegeben. Sie können auch mehrere Bücher angeben, indem Sie sie durch Kommas trennen. Detaillierte API-Spezifikationen sind in OpenBD Bibliography API-Datenspezifikationen (v1) beschrieben.
Grundsätzlich können Sie in die Zusammenfassung schauen.
ISBN ist eine Abkürzung für International Standard Book Number, eine 10- oder 13-stellige Nummer, die jedem Buch eindeutig zugeordnet ist. Es befindet sich auf der Rückseite der meisten Bücher und ist auch ein Barcode. Wenn es sich um ein altes Buch handelt, wird es möglicherweise nur im Impressum aufgeführt. Der Grund, warum Bücher einen zweistufigen Barcode haben, besteht darin, dass sie durch ISBN-Code und Buch-JAN-Code (Produktcode) getrennt sind.
Erstellen Sie eine Funktion, um Folgendes zu erhalten (Sie müssen den Kommentar nicht verschieben).
def getBookByISBN(isbn)
return nil if !isbn.match(/^(\d{10}|978\d{10})$/) #Gibt null zurück, wenn nicht im ISBN-Format
uri = URI.parse("https://api.openbd.jp/v1/get?isbn=" + isbn)
res = Net::HTTP.get_response(uri) #Rufen Sie die API auf
return nil if res.code != "200" #Gibt null zurück, wenn ein Fehler auftritt
books = JSON.parse(res.body) #API-Ergebnisse als JSON-Format lesen
return nil if books.length == 0 #Gibt null zurück, wenn die Anzahl der zutreffenden Bücher 0 ist
return books[0] #Gibt das erste der API-Ergebnisse zurück
end
Letztes Mal gemacht
get '/' do
"Hello wolrd!"
end
Lass uns ablenken. Dieses Mal möchte ich eine Spezifikation erstellen, die den Buchnamen zurückgibt, wenn auf "/? Isbn = 978xxxxxxxxxx" zugegriffen wird.
get '/' do
book = getBookByISBN(params['isbn'])
return book['summary']['title']
end
Wenn Sie jetzt schreiben können, greifen wir auf "http: // localhost: {PORT} /? Isbn = {ISBN}" Ihres Lieblingsbuchs zu. Wenn der Name des Buches herauskommt, ist es ein Erfolg!
Erinnern Sie sich an den LINE Bot-Code, den ich zuletzt geschrieben habe.
post '/callback' do
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
error 400 do 'Bad Request' end
end
events = client.parse_events_from(body)
events.each do |event|
if event.is_a?(Line::Bot::Event::Message)
if event.type === Line::Bot::Event::MessageType::Text
message = {
type: 'text',
text: event.message['text']
}
client.reply_message(event['replyToken'], message)
end
end
end
"OK"
end
Das wichtigste davon
message = {
type: 'text',
text: event.message['text']
}
client.reply_message(event['replyToken'], message)
Es ist der Teil von.
Dies ist der Vorgang, der ausgeführt werden muss, wenn eine "Textnachricht" vom Benutzer eingeht.
Sie können die von event.message ['text']
gesendeten Textdaten erhalten.
Sie können eine Antwort mit "client.reply_message (event ['replyToken'], message)" senden.
Lassen Sie uns diesen Code ein wenig verbessern, damit wir nach Büchern suchen können.
if event.type === Line :: Bot :: Event :: MessageType :: Text
Bitte schreiben Sie den Inhalt von bis
end` wie folgt um.
book = getBookByISBN(event.message['text']) #Suchen Sie nach ISBN und weisen Sie Variablen Buchinformationen zu
messages = [] #Variablen für die zu antwortende Nachricht
if book.nil?
#Wenn das Buch leer ist
messages.push({
type: 'text',
text: 'Das Buch wurde nicht gefunden'
})
else
#Wenn ein Buch gefunden wird
messages.push({
type: 'text',
text: book['summary']['title']
})
end
client.reply_message(event['replyToken'], messages)
Bisher wurde client.reply_message ein Objekt mit den Namen "type" und "text" übergeben, aber diesmal habe ich versucht, ein Array zu übergeben, das das Nachrichtenobjekt enthält. Auf diese Weise können Sie auf mehrere Nachrichten antworten. Es wird beim Erstellen einer Funktion verwendet, um auf das Titelbild zu antworten, das im nächsten Kapitel erscheinen wird!
Die Funktionsaddition von LINE Bot ist übrigens abgeschlossen! Ich würde es gerne sofort ausprobieren, aber wie ich letztes Mal erklärt habe, kann ich es nur testen, wenn ich es bereitstelle. Geben Sie den folgenden Befehl ein, der bereitgestellt werden soll.
$ git add -A
$ git commit -m "add search book"
$ git push heroku master
Senden Sie nach Abschluss der Bereitstellung eine ISBN an LINE Bot. Wenn der Buchname wie im folgenden Screenshot gezeigt zurückgegeben wird, sind Sie erfolgreich!
Als nächstes fügen wir eine Funktion hinzu, um das Titelbild des Buches zurückzugeben.
Das Titelbild kann mit "Buch [" Zusammenfassung "] [" Titel "]" erhalten werden. Da jedoch nicht alle Bücher Bilder enthalten, müssen Sie überprüfen, ob sie vorhanden sind.
Schreiben wir also wie folgt.
book = getBookByISBN(event.message['text']) #Suchen Sie nach ISBN und weisen Sie Variablen Buchinformationen zu
messages = [] #Variablen für die zu antwortende Nachricht
if book.nil?
#Wenn das Buch leer ist
messages.push({
type: 'text',
text: 'Das Buch wurde nicht gefunden'
})
else
#Wenn ein Buch gefunden wird
if !book['summary']['cover'].empty?
#Wenn es ein Titelbild gibt
messages.push({
type: 'image',
originalContentUrl: book['summary']['cover'],
previewImageUrl: book['summary']['cover'],
})
end
messages.push({
type: 'text',
text: book['summary']['title']
})
end
client.reply_message(event['replyToken'], messages)
Damit ist die Antwortfunktion für das Titelbild abgeschlossen! Geben Sie den folgenden Befehl ein, der bereitgestellt werden soll.
$ git add -A
$ git commit -m "add cover image"
$ git push heroku master
Senden Sie nach Abschluss der Bereitstellung eine ISBN an LINE Bot. Wenn das Titelbild und der Buchname wie im folgenden Screenshot gezeigt zurückgegeben werden, sind Sie erfolgreich!
Ich führe auch eine einfache Fehlerprüfung durch. Wenn ich also eine nicht vorhandene ISBN sende, wird ein Fehler ordnungsgemäß zurückgegeben.
Bei einem Buch ohne Titelbild sollte nur der Titel wie folgt zurückgegeben werden.
In diesem Artikel habe ich einen Bot erstellt, der den Titel und das Bild des Buches basierend auf der gesendeten ISBN zurückgibt! Es enthält nützliche Teile zum Erstellen von Bot, z. B. das Senden mehrerer Nachrichten. Ich denke, es ist nützlich, sich daran zu erinnern!
Recommended Posts