質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2120閲覧

Herokuでのローカルファイルへのアクセス

yamataro0

総合スコア1

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/18 04:48

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Line API(Bot)開発において,対話相手からメッセージがあるとその内容をローカル(自分のPC)にあるテキストファイルに自動で書き込むシステム

なおwebhookを用いており,オウム返しの動作は下のURLのコードを参考にし,動作を確認した

https://note.com/consultant1221/n/n7084879ae345

発生している問題・エラーメッセージ

FileNotFoundError: [Errno 2] No such file or directory (当然オンライン上で動かしているプログラムなので,ローカルのpathを指定しても動かない)

該当のソースコード

Python

1from flask import Flask, request, abort 2from linebot import ( 3 LineBotApi, WebhookHandler 4) 5from linebot.exceptions import ( 6 InvalidSignatureError 7) 8from linebot.models import ( 9 FollowEvent, MessageEvent, TextMessage, TextSendMessage, ImageMessage, ImageSendMessage, TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction 10) 11import os 12# 軽量なウェブアプリケーションフレームワーク:Flask 13app = Flask(__name__) 14#環境変数からLINE Access Tokenを設定 15LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"] 16#環境変数からLINE Channel Secretを設定 17LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"] 18line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN) 19handler = WebhookHandler(LINE_CHANNEL_SECRET) 20@app.route("/callback", methods=['POST']) 21def callback(): 22 # get X-Line-Signature header value 23 signature = request.headers['X-Line-Signature'] 24 # get request body as text 25 body = request.get_data(as_text=True) 26 app.logger.info("Request body: " + body) 27 # handle webhook body 28 try: 29 handler.handle(body, signature) 30 except InvalidSignatureError: 31 abort(400) 32 return 'OK' 33# MessageEvent 34@handler.add(MessageEvent, message=TextMessage) 35def handle_message(event): 36 37f = open('自分のローカルのテキストファイルのパス', 'w') 38f.write(event.message.text) 39f.close() 40 41line_bot_api.reply_message 42( 43 event.reply_token, 44 TextSendMessage(text=event.message.text) 45 ) 46if __name__ == "__main__": 47 port = int(os.getenv("PORT")) 48 app.run(host="0.0.0.0", port=port)

試したこと

・オンライン上でローカルのファイルにアクセス(file open)を使う方法を調べたが,見つからなかった.
・ネットワークパスについて調べたが,実現したいことに繋がるかわからなかった.

→そもそもセキュリティの都合上オンライン上から自分のテキストファイルに遠隔で書き込むことができない可能性も考えているのですが,知識が浅いため,それができないという知識(理由など)もないので,お手数だとは思いますが,教えていただけると幸いです.

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

当然ながらそんなことは不可能。
プログラミング以前の基礎なのでプログラミングから離れて数年くらい「普通にPCを使う」経験が必要。

自分のPCでなんらかのプログラムを動かせば可能だけどそれよりは
Heroku→Google DriveやDropboxなどの外部サービス→自分のPCで同期。

投稿2021/06/18 05:25

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamataro0

2021/06/18 05:50

はっきりと不可能と教えていただき,ありがとうございます. 私は勉強不足なので,もっと自分で判断できるように精進いたします. さらに,実現のために外部サービスを経由する方法まで提案していただき,ありがとうございました!
guest

0

→そもそもセキュリティの都合上オンライン上から自分のテキストファイルに遠隔で書き込むことができない可能性も考えているのですが

はい、ローカルマシン側にそれに対応した仕掛けを作っておかないと不可能です。

投稿2021/06/18 05:17

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamataro0

2021/06/18 05:51

しっかり読んでいただき,その上で不可能を教えてくださり,ありがとうございます. 別の方法で対話相手の発信内容を受け取るシステムを検討してみようと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問