Wir haben einen LINE Bot namens "Tell me Ayase" entwickelt. Es gibt noch viele unfertige Teile, aber da wir die Hauptfunktionen entwickelt haben, haben wir beschlossen, sie auf GitHub und Qiita zu veröffentlichen. In diesem Artikel werden die Funktionen und technischen Aspekte erläutert.
Klicken Sie hier, um Freunde hinzuzufügen <img src = "https://scdn.line-apps.com/n/line_add_friends/btn/ja.png " alt = "Freund hinzufügen" Höhe = "36" border = "0">
https://github.com/Aseiide/ayase_bot
Die Universität, an der sich auch mein Zuhause befindet, liegt an der Chiyoda-Linie. Da sich die Chiyoda-Linie auf der JR Joban-Linie befindet, ist der Abstieg mit ziemlich weit entfernten Orten wie Matsudo, Kashiwa und Griffen verbunden, so dass der Abend la in der Hektik ziemlich überfüllt ist. Auf der anderen Seite haben die Züge nach Ayase und Kita Ayase kurze Ziele und die Wahrscheinlichkeit, überfüllt zu sein, ist sehr gering. Deshalb habe ich versucht, sie hierher zu bringen. Es war mühsam, die Uhrzeit mit der Transfer-App von Yahoo zu suchen und die Uhrzeit zu überprüfen. Deshalb habe ich mich entschlossen, an der Entwicklung von LINE Bot zu arbeiten.
https://github.com/line/line-bot-sdk-ruby Ich hatte einen Bot für die Rückgabe von Papageien gemacht, also fuhr ich mit der Produktion fort, während ich mich auf das SDK und die Dokumente bezog.
Wählen Sie diese API aus, die einzeln und kostenlos verwendet werden kann. Im kostenlosen Plan ist es nicht möglich, einfach die Zeit abzurufen, daher wird die URL, die durch Drücken der API zurückgegeben wird, abgekratzt, um die Zeit abzurufen.
station_code = {
:Yoyogi Uehara=> "23044",
:Yoyogi Park=> "23045",
:Vor Meiji Jingu=> "23016",
:Omotesando=> "22588",
:Nogizaka=> "22893",
:Akasaka=> "22485",
:Parlament=> "22668",
:Kasumi Seki=> "22596",
:Hibiya=> "22951",
:Vor der Doppelbrücke=> "22883",
:Otemachi=> "22564",
:Neues Ochanomizu=> "22732",
:Yushima=> "23038",
:Nezu=> "22888",
:Sendagi=> "22782",
:Nishi Nippori=> "22880",
:Machiya=> "22978",
:Kitasenju=> "22630",
:Ayase=> "22499",
:Kita Ayase=> "22627"
}
Beim Aufrufen der API wird die vom Benutzer auf Japanisch eingegebene Station in den Stationscode konvertiert. Als Ergebnis verschiedener Versuche habe ich es als Symbol übergeben und in einen Stationscode einer Zeichenfolge konvertiert.
@station_name = event.message["text"]
Da es notwendig war, es in einer Variablen in LINE zu speichern, wird es auf diese Weise in einer Variablen gespeichert. Zu Beginn der Entwicklung funktionierte es überhaupt nicht, da es auf `` `station_name = gets.chomp``` gesetzt war.
res1 = Net::HTTP.get(URI.parse("http://api.ekispert.jp/v1/json/search/course/light?key=#{ENV['ACCESS_KEY']}&from=#{station_code[@station_name.to_sym]}&to=22499"))
Konvertieren Sie den von station_name empfangenen Stationsnamen in ein Symbol Ich treffe die API, indem ich das Symbol in Variablen erweitere.
hash = JSON.parse(res1)
url = hash["ResultSet"]["ResourceURI"]
Wenn Sie die API drücken
"ResultSet":~~
"ResourceURI":~~
Da es in Form von zurückgegeben wird, wird es in einer Variablen namens url unter Verwendung eines Hashs gespeichert.
Vor der Korrektur
doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath('/html/body/div[1]/div[4]/div/div[1]/div[2]/div/table/tr[1]/td[3]/p[1]').each do |node|
$time = node.inner_text
end
Überarbeitet
time = nil
doc.xpath('/html/body/div[1]/div[4]/div/div[1]/div[2]/div/table/tr[1]/td[3]/p[1]').each do |node|
time = node.inner_text
end
Selbst wenn ich den Xpath kopiere und einfüge, den das Entwicklertool von Chrome erhalten hat, funktioniert es nicht.
Immerhin hat das Entfernen des ursprünglich enthaltenen tbody-Tags einwandfrei funktioniert.
Da time
außerhalb des ~~ Blocks verwendet wird, wird es als globale Variable gespeichert. (** Überprüfen Sie, ob Instanzvariablen gut funktionieren **) ~~
Ich habe den Code geändert, um den Umfang von "$ time" einzuschränken.
Bis jetzt hatte ich mich nach einem Tutorial entwickelt, daher war es für mich das erste Mal, dass ich mit der Entwicklung fortfuhr, während ich von Grund auf neu recherchierte. Während ich nach Wörtern suchte, die ich nicht verstand, lernte ich von einem Ingenieur, von dem ich wusste, was ich im Implementierungsteil nicht verstand. Ich habe das Gefühl, dass ich die grundlegenden Teile gelernt habe, die in Büchern und online schwer zu erlernen sind, wie man in Text kommuniziert und Fragen stellt.
Egal wie oft ich das Tutorial gemacht habe, ich fand es sehr schwierig, Git zu verstehen. Bis jetzt hatte ich nur die Erfahrung, die entwickelten auf GitHub zu übertragen, daher war es sehr schön, die Erfahrung zu haben, mit der Entwicklung fortzufahren, während ich Zweige schneide.
Es fiel mir schwer, den vom Benutzer gesendeten Stationsnamen in einer Variablen zu speichern, die ich in der Code-Erklärung erwähnt habe. Der Code ist sehr einfach, aber ich konnte ihn nicht in der Dokumentation finden und es hat lange gedauert, bis ich diese Schreibweise gefunden habe. Am Ende fand ich eine ähnliche Implementierung aus einem auf Qiita veröffentlichten Artikel und kam zu ihr.
Im Code
post '/callback' do
end
Es gibt einen Block namens. Es gab Zeiten, in denen es nicht funktionierte, weil ich nicht wusste, dass es während dieses Blocks jedes Mal ausgeführt wurde. (Ich habe die Quelle noch nicht gefunden) Das Schaben musste jedes Mal durchgeführt werden. Die Ruby-Community (Nishi Nippori.rb, Fukuoka.rb) hat mich über die Implementierung hier unterrichtet, und es funktioniert gut.
Es sind weniger als 100 Codezeilen, aber ich bin sehr froh, dass ich tatsächlich das verschieben kann, was ich machen wollte! Ich habe das Gefühl, dass ich noch nicht genug gelernt habe, aber ich denke, es war eine gute Lernerfahrung.
--Senden Sie eine Liste der "Sender, die gesendet werden können", wenn Sie sich als Freund registrieren
Beim Schreiben dieses Kommentarartikels habe ich auf den folgenden Artikel verwiesen https://qiita.com/shinbunbun_/items/00c4064c8133a34cf7c3 https://qiita.com/inoue2002/items/7e47283ba9affa0fac82