[PYTHON] Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.

(1) Hintergrund der Anwendungserstellung

・ Seit ich umgezogen bin, benutze ich den Bus zum Pendeln. ・ Ich mache mit einem iPhone ein Foto des Busfahrplans und überprüfe es nacheinander anhand der "Fotos". ・ Die Pendelstrecke ist [Heimat ↔︎ (Bus) ↔︎ Nächster Bahnhof ↔︎ (Zug) ↔︎ Firmenbahnhof], besonders auf dem Rückweg möchte ich in den Bus einsteigen, sobald ich am nächsten Bahnhof ankomme. ・ Es ist mühsam, den nächsten Vorgang jedes Mal auszuführen, wenn Sie die Buszeit überprüfen. (Starten Sie die Foto-App auf Ihrem iPhone.) → (Suchen Sie nach der Buszeit aus der Foto-App.) ・ Ich möchte die Buszeit effizienter kennen. ・ Ich möchte mit Python, LINEBot usw., die ich studiere, etwas Nützliches für mein Leben schaffen. ・ Obwohl ich fleißig lerne, habe ich es satt, Apps zu erstellen, die Menschen imitieren. ・ Das Obige ist der Hintergrund dieser Anwendungserstellung. (Achtung) Die Quelle ist ein Anfänger, daher ist sie schmutzig (bitte vergib mir). (Hinweis) Ich nehme den Zeitplan aus der CSV-Datei, teste ihn in der lokalen Umgebung und stelle ihn dann in Heroku bereit (möglicherweise gibt es einen effizienteren Weg).

↓↓↓↓↓↓↓ (Fertiggestelltes Bild) ↓↓↓↓↓↓↓↓ Wenn Sie "Go" an LINE Bot senden, werden das Bild des Busses, die Buszeit von der Bushaltestelle, die Ihrem Haus am nächsten zum Bahnhof liegt, und die nächste Buszeit zurückgegeben. Wenn Sie "Zurück" sagen, wird die Buszeit vom nächsten Bahnhof zur nächstgelegenen Bushaltestelle zurückgegeben. スクリーンショット 2020-03-29 14.10.08.png

(2) Was in diesem Artikel nicht zu schreiben ist und die Struktur des Artikels

① Schreiben Sie nicht in diesen Artikel

・ So erstellen Sie einen LINE Bot-Kanal ・ Details zur Bereitstellung in Heroku

② Artikelstruktur

(1) Hintergrund der Anwendungserstellung (2) Was in diesem Artikel nicht zu schreiben ist und die Struktur des Artikels (3) Umweltbau (4) Funktionsprüfung in lokaler Umgebung (5) Mit Heroku in den LINE Bot integrieren

(3) Umweltbau

· Mac ・ Python3 ・ Sqlite3 ・ Postgresql ・ Heroku · Flasche

Erstellen Sie zunächst ein Verzeichnis linebot_jikokuhyou auf dem Desktop, erstellen Sie eine virtuelle Umgebung im Verzeichnis und starten Sie es.

python3 -m venv .
source bin/activate

(4) Funktionsprüfung in lokaler Umgebung

Testen Sie zunächst in Ihrer lokalen Umgebung. Die Datenbank verwendet SQL. Importieren Sie die zuvor vorbereitete CSV-Datei in SQL und überprüfen Sie, ob das Programm lokal lokal mit Flask funktioniert.

① Bereiten Sie das Arbeitsverzeichnis und die Arbeitsdatei vor

Bereiten Sie das Verzeichnis und die Dateien wie unten gezeigt vor. Verwenden Sie für iki.csv und kaeri.csv die von Ihnen selbst erstellten Dateien (später beschrieben). Andere als die oben genannten Dateien werden als leere Dateien erstellt.

linebot_jikokuhyou
├csv_kakou.py
├csv_to_sql.py
├local_main.py
├jikoku_main.py
├assets
│  ├database.py
│  ├models.py
│  ├__ini__.py
│  ├iki.csv (von Ihnen selbst erstellte CSV-Datei)
│  └kaeri.csv (von Ihnen selbst erstellte CSV-Datei)
│ 
└templates
   ├test.html
   └test2.html

(Ergänzende Erklärung)

-Der folgende Zeitplan wird als CSV-Datei (Beispiel) erstellt. (↓↓↓↓↓↓ Busfahrplan von der Haltestelle in der Nähe Ihres Hauses zum nächsten Bahnhof) スクリーンショット 2020-03-28 23.24.12.png (↓↓↓↓↓↓ Busfahrplan vom nächsten Bahnhof zur Haltestelle in der Nähe Ihres Hauses) スクリーンショット 2020-03-28 23.24.34.png

② Erstellen Sie eine jikoku.csv-Datei und führen Sie sie aus

.py:csv_kakou.py


#iki.Verarbeitung von CSV
list = []
with open('assets/iki.csv',encoding='utf-8')as f:
    #Prozess zum zeilenweisen Lesen
    for i in f:
        columns = i.rstrip()
        list.append(columns)
list2 = []
for i in list:
    columns2 = i.split(',')
    for ii in range(len(columns2)):
        if ii != 0:
            list2.append(columns2[0]+'Zeit'+columns2[ii]+'Protokoll')
list2.pop(0)
num = 1
with open('assets/jikoku.csv','w',encoding='utf-8')as f:
    go_or_come = 'Gehen'
    for time in list2:
        f.write(str(num) +','+time+','+str(go_or_come)+'\n')
        num+=1

#kaeri.Verarbeitung von CSV
list = []
with open('assets/kaeri.csv',encoding='utf-8')as f:
    #Prozess zum zeilenweisen Lesen
    for i in f:
        columns = i.rstrip()
        list.append(columns)
list2 = []
for i in list:
    columns2 = i.split(',')
    for ii in range(len(columns2)):
        if ii != 0:
            list2.append(columns2[0]+'Zeit'+columns2[ii]+'Protokoll')
list2.pop(0)
with open('assets/jikoku.csv','a',encoding='utf-8')as f:
    go_or_come = 'Rückkehr'
    for time in list2:
        f.write(str(num) +','+time+','+str(go_or_come)+'\n')
        num+=1

・ ↓↓↓↓↓↓↓ Die im Assets-Verzeichnis erstellte Datei jikoku.csv lautet wie folgt (Teilauszug). Insgesamt gibt es 64 Datensätze. スクリーンショット 2020-03-28 23.58.19.png スクリーンショット 2020-03-29 0.06.19.png

③ Erstellen Sie die Dateien database.py und models.py im Assets-Verzeichnis

Erstellen Sie jedes im Assets-Verzeichnis.

.py:database.py


#coding: utf-8


from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session,sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import datetime
import os

database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.db')

engine = create_engine('sqlite:///' + database_file,convert_unicode=True,echo=True)
db_session = scoped_session(
                sessionmaker(
                    autocommit = False,
                    autoflush = False,
                    bind = engine
                )
            )
Base = declarative_base()
Base.query = db_session.query_property()

def init_db():
    #Importieren Sie Modelle in den Assets-Ordner
    import assets.models
    Base.metadata.create_all(bind=engine)

.py:models.py


#coding: utf-8

from sqlalchemy import Column,Integer,String,Boolean,DateTime,Date,Text
from assets.database import Base
from datetime import datetime as dt

#Informationen zur Datenbanktabelle
class Data(Base):
    #Einstellungen für Tabellennamen,Auf Namen benennen
    __tablename__ = "data"
    #Setzen Sie die Spalteninformationen und setzen Sie sie eindeutig auf False (was bedeutet, dass der gleiche Wert akzeptiert wird).
    #Der Primärschlüssel wird bei der Suche nach einer normalerweise festgelegten Zeile benötigt
    id = Column(Integer,primary_key=True)
    #Beurteilen Sie, ob Sie gehen oder zurückkehren möchten
    go_or_come = Column(Text,unique=False)
    #Nummerierung getrennt vom Hauptschlüssel
    num = Column(Integer,unique=False)
    #Zeit im Stundenplan
    time = Column(Text,unique=False)
    #timestamp
    timestamp = Column(DateTime,unique=False)

    #initialisieren
    def __init__(self,go_or_come=None,num=0,time=None,timestamp=None):
        self.go_or_come = go_or_come
        self.num = num
        self.time = time
        self.timestamp = timestamp

④ Erstellen Sie eine Datei csv_to_sql.py

-Erstellen Sie eine Datei csv_to_sql.py, die CSV-Daten liest und in SQL-Daten schreibt.

.py:csv_to_sql.py


from assets.database import db_session
from assets.models import Data

#Initialisierungsprozess
from assets.database import init_db
init_db()

#Verarbeitung zum Schreiben von CSV nach SQL
with open('assets/jikoku.csv',encoding='utf-8')as f:
    for i in f:
        columns = i.rstrip().split(',')
        num = int(columns[0])#num ist Modelle.Da es in py als int-Typ definiert ist, wurde es als int-Typ erstellt
        time = columns[1]
        go_or_come = columns[2]
        row = Data(num=num,time=time,go_or_come=go_or_come)
        db_session.add(row)
        db_session.commit()

(Ergänzende Erklärung)

-Initiate SQL mit init_db ().

sqlite3 data.db

Wenn Sie in SQLite Folgendes eingeben,

select * from data;

Folgendes wurde ausgegeben, und ich konnte bestätigen, dass die Daten in SQL geschrieben wurden. スクリーンショット 2020-03-29 1.49.22.png

⑤ Erstellen Sie eine jikoku.py-Datei

.py:jikoku.py


from assets.database import db_session
from assets.models import Data
import datetime


def jikoku_search(route):
    #Lesen Sie SQL
    data = db_session.query(Data.num,Data.time,Data.go_or_come,).all()

    #Aktuelles Datum und Uhrzeit abrufen (Datum / Uhrzeit-Typ)
    date_todaytime = datetime.datetime.today()
    #Konvertieren Sie das Obige in den Typ str
    str_todaytime = date_todaytime.strftime('%Y Jahr%m Monat%d Tag%Uhr%M Minuten')
    #Vom aktuellen Datum und der aktuellen Uhrzeit wird nur ● Jahr ● Monat ● Tag erfasst(Datumstyp)
    date = datetime.date.today()
    #Konvertieren Sie das Obige in den Typ str
    str_date = date.strftime('%Y Jahr%m Monat%d Tag')

    #Variablen setzen
    bustime = ''
    next_bustime = ''

    #Route klassifiziert das Gehen und Zurückkehren
    route = route
    #Extrahieren Sie die Abfahrtszeit des letzten Busses und die Abfahrtszeit des nächsten Busses von sql
    for i in data:
        str_sql = i[1]
        #Fügen Sie das aktuelle Datum und die aktuelle Uhrzeit ● Jahr ● Monat ● Tag zur Uhrzeit von sqr hinzu, um es zu „Datum und Uhrzeit“ zu machen.
        str_sql_rr = str_date + str_sql
        #Konvertieren Sie das Obige in den Datum / Uhrzeit-Typ
        date_sql_rr = datetime.datetime.strptime(str_sql_rr,'%Y Jahr%m Monat%d Tag%Uhr%M Minuten')
        #Ermitteln Sie das Datum und die Uhrzeit des letzten Busses im Vergleich zum aktuellen Datum und der aktuellen Uhrzeit
        if date_sql_rr > date_todaytime and i[2]== route:#go_or_Wenn die Route übereinstimmt, gehen Sie wie folgt vor
            #Ermitteln Sie die Differenz zwischen dem Abfahrtsdatum und der Abfahrtszeit des letzten Busses und dem aktuellen Datum und der aktuellen Uhrzeit
            date_sabun = date_sql_rr-date_todaytime
            #Die Differenz von Datum und Uhrzeit ist vom Typ Zeitdelta. Da der Timedelta-Typ mit strftime nicht zum str-Typ gemacht werden kann, wird str()In str Typ gemacht
            #Der Timedelta-Typ ist 0:00:Da es 00 ist und die Differenz innerhalb von 1 Stunde vom Zeitplan liegt, werden "Minuten" durch Schneiden extrahiert.
            if str(date_sabun)[0:1] == "0":
                bustime = 'Der nächste Bus ist'+str_sql_rr+'Abfahrt nach.' + 'nach' + str(date_sabun)[2:4] + 'Es sind Minuten.'
            else:
                bustime = 'Der nächste Bus ist'+str_sql_rr+'Abfahrt nach.' + 'nach'+ str(date_sabun)[0:1] + 'Zeit' + str(date_sabun)[2:4] + 'Es sind Minuten.'

            #Erhalten Sie die Nummer des Abfahrtsdatums und der Abfahrtszeit des nächsten Busses
            next_num = i[0]
            #Holen Sie sich die Abfahrtszeit des nächsten Busses (Verarbeitung, wenn der neueste Bus vorhanden ist, der nächste Bus jedoch den letzten Zug überschreitet)
            try:
                _next_bustime = db_session.query(Data.num,Data.time,Data.go_or_come).all()[next_num].time
                #Fügen Sie das aktuelle Datum und die aktuelle Uhrzeit ● Jahr ● Monat ● Tag zur Abfahrtszeit des nächsten Busses hinzu, um "Datum und Uhrzeit" festzulegen.
                next_bustime = str_date + _next_bustime+'Abfahrt nach.'
            except:
                next_bustime="Es ist über den letzten Zug."

            #Verarbeitung zum Beenden der for-Anweisung nach Abrufen der Buszeit
            break

        #Verarbeitung, wenn der letzte Zug für den letzten Bus und den nächsten Bus vorbei ist
        else:
            bustime="Der nächste Bus fährt am letzten Zug vorbei."
            next_bustime="Der nächste Bus fährt auch über den letzten Zug."


    return bustime,next_bustime

⑥ Erstellen Sie local_main.py

-Erstellen Sie local_main.py, um zu überprüfen, ob jikoku.py in der lokalen Umgebung ordnungsgemäß funktioniert.

.py:local_main.py


from flask import Flask,request,render_template
from assets.database import db_session
from assets.models import Data
import jikoku_main as jm

app = Flask(__name__)

@app.route('/')
def test():
    #Lesen Sie aus SQL
    data = db_session.query(Data.num,Data.time,Data.go_or_come,).all()
    return render_template('test.html',data=data)

@app.route('/iki')
def test2():
    result1,result2 = jm.jikoku_search('Gehen')
    return render_template('test2.html',bustime=result1,next_bustime=result2)

@app.route('/kaeri')
def test3():
    result1,result2 = jm.jikoku_search('Rückkehr')
    return render_template('test2.html',bustime=result1,next_bustime=result2)

if __name__ == '__main__':
    app.run(debug=True)

⑦ Erstellen Sie test.html und test2.html im Vorlagenverzeichnis

Erstellen Sie jedes im Vorlagenverzeichnis wie folgt.

.html:test.html


<!DOCTYPE html>
<html lang='ja'>
  <head>
      <meta charset='utf-8'>
      <title>Jikokuhyou</title>
      <style>body{padding:10px;}</style>
  </head>


  <body>
    <form action='/iki' method='get'>
      <button type='submit'>Gehen</button>
    </form>
    <form action='/kaeri' method='get'>
      <button type='submit'>Rückkehr</button>
    </form>
  </body>

</html>

.html:test2.html


<!DOCTYPE html>
<html lang='ja'>
  <head>
      <meta charset='utf-8'>
      <title>Jikokuhyou</title>
      <style>body{padding:10px;}</style>
  </head>


  <body>
    {{'Der neueste Bus ist'+bustime}} <br>{{'Der nächste Bus ist'+next_bustime}}
    <form action='/' method='get'>
      <button type='submit'>Rückkehr</button>
    </form>
  </body>
</html>

⑧ Erstellen Sie eine \ __ init__ -Datei im Assets-Verzeichnis

.py:__init__.py


⑨ Überprüfen Sie in der lokalen Umgebung

Zu diesem Zeitpunkt können Sie den Busfahrplan in Ihrer lokalen Umgebung ordnungsgemäß extrahieren.

(5) Mit Heroku in den LINE Bot integrieren

① Bereiten Sie das Arbeitsverzeichnis und die Arbeitsdatei vor

linebot_jikokuhyou
├csv_kakou.py
├csv_to_sql.py
├local_main.py
├jikoku_main.py
├main.py (zusätzlich)
├requirments.txt (zusätzlich)
├runtime.txt (zusätzlich)
├Procfile (zusätzlich)
├assets
│  ├database.py
│  ├models.py
│  ├data.db (bisher erstellte Dateien)
│  ├__ini__.py
│  ├jikoku.csv (bisher erstellte Dateien)
│  ├iki.csv
│  └kaeri.csv
│ 
└templates
   ├test.html
   └test2.html

② Erstellen Sie main.py

.py:main.py


from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,LocationMessage,ImageSendMessage
)
import os
import jikoku_main as jm


app = Flask(__name__)

YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/")
def hello_world():
    return "hello world!"


@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'



@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if 'Gehen' in event.message.text:
        result1,result2 = jm.jikoku_search('Gehen')
        line_bot_api.reply_message(
            event.reply_token,
            [
            ImageSendMessage(original_content_url='https://www.photolibrary.jp/mhd5/img237/450-2012011014412960119.jpg',
            preview_image_url='https://www.photolibrary.jp/mhd5/img237/450-2012011014412960119.jpg'),
            TextSendMessage(text=result1),
            TextSendMessage(text=result2)
            ]
        )


    if 'Rückkehr' in event.message.text:
        result1,result2 = jm.jikoku_search('Rückkehr')
        line_bot_api.reply_message(
            event.reply_token,
            [
            ImageSendMessage
(original_content_url='https://www.photolibrary.jp/mhd5/img237/450-2012011014412960119.jpg',
            preview_image_url='https://www.photolibrary.jp/mhd5/img237/450-2012011014412960119.jpg'),
            TextSendMessage(text=result1),
            TextSendMessage(text=result2)
            ]
        )



if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

(Ergänzende Erklärung)

・ Die Gesamtstruktur von LINE Bot finden Sie unter Verwenden wir LINE BOT (CallBack-Programm: Empfang). Es war.

③ Ändern Sie database.py

-Modifizieren Sie database.py, wenn Sie Herokus postgresql verwenden.

.py:database.py


#coding: utf-8

#database.py/Datei, die die anfänglichen Einstellungen der zu verwendenden Datenbank verarbeitet, z. B. SQLite
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session,sessionmaker
from sqlalchemy.ext.declarative import declarative_base

import datetime
import os

#data_Benannt db, Datenbank.Wo py ist (os.path.dirname(__file__)), Mit einem absoluten Pfad (os.path.abspath)、data_Speichern Sie die Datenbank Speichern Sie den Pfad.
database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'data.db')

#Verwenden der Datenbank sqlite (engin)、database_Daten in Datei gespeichert_Verwenden Sie db und geben Sie sqlite aus, wenn Sie mit echo (echo) arbeiten=True)
#engine = create_engine('sqlite:///' + database_file,convert_unicode=True,echo=True)
engine = create_engine(os.environ.get('DATABASE_URL') or 'sqlite:///' + database_file,convert_unicode=True,echo=True)
db_session = scoped_session(
                sessionmaker(
                    autocommit = False,
                    autoflush = False,
                    bind = engine
                )
            )

#declarative_Erstellen Sie eine Instanz von base
Base = declarative_base()
Base.query = db_session.query_property()


#Funktion zum Initialisieren der Datenbank
def init_db():
    #Importieren Sie Modelle in den Assets-Ordner
    import assets.models
    Base.metadata.create_all(bind=engine)

④ Legen Sie Umgebungsvariablen in Heroku fest

・ Greifen Sie zuerst auf LINE Develpers zu, registrieren Sie sich und erstellen Sie einen neuen Kanal (Erklärung wird weggelassen).

heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="Kanalzugriffstoken-Zeichenfolge" -a (App-Name)
heroku config:set YOUR_CHANNEL_SECRET="Geheime Zeichenfolge des Kanals" -a (App-Name)

Stellen Sie sicher, dass die Umgebungsvariablen in Heroku richtig eingestellt sind.

heroku config

⑤ Erstellen Sie weitere erforderliche Dateien

-Erstellen Sie Procfile, runtime.txt, require.txt.

.txt:runtime.txt


python-3.8.2
web: python main.py

Beschreiben Sie die Datei "resources.txt", indem Sie im Terminal Folgendes eingeben.

pip freeze > requirements.txt

⑤ Drücken Sie auf Heroku und stellen Sie es bereit

git add .
git commit -m'the-first'
git push heroku master
Heroku open

↓ ↓ ↓ ↓ ↓ Heroku öffnen und mit einem Browser überprüfen. Wenn "Hallo Welt!" Angezeigt wird, ist die Bereitstellung erfolgreich abgeschlossen. スクリーンショット 2020-03-29 1.34.22.png

⑥ Schreiben Sie die Datenbank in postgresql

heroku run bash
python3 csv_to_sql.py

Stellen Sie sicher, dass es richtig geschrieben ist. Geben Sie den folgenden Befehl ein.

heroku pg:psql
Befehl zum Auflisten der Daten in der Tabelle
select *von (Tabellenname);

Ich konnte bestätigen, dass Folgendes ausgegeben wurde und dass es ordnungsgemäß in postgresql geschrieben wurde. スクリーンショット 2020-03-29 1.45.06.png

⑦ Richten Sie den Webhook für LINE-Entwickler ein

Legen Sie die URL für den Webhook von LINE Developers fest und aktivieren Sie die Verwendung des Webhooks (Details werden weggelassen). Registrieren Sie sich als Freund und starten Sie LINE Bot, um den Vorgang abzuschließen. スクリーンショット 2020-03-29 14.10.08.png

Recommended Posts

Mit LINEBot habe ich eine Anwendung erstellt, die mich über die "Buszeit" informiert.
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Ich habe eine App erstellt, die mich warnt, wenn ich während des Studiums mit OpenCV mit meinem Smartphone herumspiele
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe einen Linebot erstellt, der mich über nahegelegene Evakuierungsstellen auf AWS informiert
[Python] Ich habe eine App erstellt, um die feine Sprachunterscheidung von englischen Wörtern zu üben.
Ich habe einen IFTTT-Knopf gemacht, der den Eingang 2-Sesam mit 1 Knopf (über AWS Lambda) entsperrt.
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Ich habe in Python ein Programm erstellt, das die 1-Minuten-Daten von FX auf eine beliebige Zeit (1 Stunde usw.) ändert.
Erstellen Sie eine App, die LINE jeden Morgen über das Wetter informiert
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe eine App erstellt, um herauszufinden, wie die Mitglieder der Strohhut-Piraten aussehen
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert
Da ich zu verschiedenen Zeiten anfing zu arbeiten, machte ich einen Bot, der mir die Zeit sagt, die Arbeit zu verlassen
Ich habe eine Online-Frequenzanalyse-App erstellt
(Python) Ich habe eine App von Trello erstellt, die regelmäßig über das Auslaufen von Aufgaben informiert, die bald ablaufen.
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
Ich habe mit Heroku + Flask + PostgreSQL (Heroku Postgres) einen LINE-Bot erstellt, der mir den Typ und die Stärke von Pokemon in der Garal-Region angibt.
Ich habe den APL-Teil mit der Alexa-Fertigkeit "Industry Term Conversion" erstellt.
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten
[Python] Ich habe eine App erstellt, die automatisch die Audiodatei jedes Wortes herunterlädt, das für die Englisch-Lern-App verwendet wird.
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Ich habe eine KI erstellt, die aus Trivia vorhersagt, und mich dazu gebracht, auf meine Trivia zu schließen. Hee-AI
Ich habe Sie dazu gebracht, das Ende der IP-Adresse mit L Chika auszudrücken
Ich habe einen SlackBot erstellt, der mich jede Woche über Informationen zum AtCoder-Wettbewerb informiert
Erstellen Sie mithilfe der COTOHA-API eine App, die gut mit Berichten von Personen funktioniert
[Bot dekodieren] Ich habe versucht, einen Bot zu erstellen, der mir den Rassenwert von Pokemon angibt
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.
Ich habe ein Extenum-Paket erstellt, das die Enumeration erweitert
Ich habe meinen Hund "Monaka Bot" mit Line Bot gemacht
Ich habe vorerst mit Floydhub gespielt
Hier ist eine, ich werde die mit "künstlicher Intelligenz" ausgestatteten Anwendungen zusammenfassen, an denen ich interessiert war
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert (Google Kalender Edition).
Ganz rechts Koordinaten des Etiketts mit tkinter erstellt
Ich habe eine Twitter-App erstellt, die das Bild eines bestimmten Charakters auf der Twitter-Timeline durch Pytorch-Transfer-Lernen identifiziert und speichert
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe die Leistung von 1 Million Dokumenten mit mongoDB gemessen
Erstellen Sie eine App, die Schüler mit der Python-GUI-Version errät
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Ich habe eine Android-App erstellt, die Google Map anzeigt
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Skript zum Ändern der Klanglänge mit REAPER
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Ich habe einen Ansible-Installer gemacht
Eine Geschichte, die stolperte, als ich mit Transformer einen Chat-Chat-Bot erstellte
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe mit Swift eine N-dimensionale Matrixoperationsbibliothek Matft erstellt
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern