閉じる
閉じる
×
最近Pythonのプログラミングが捗るレジェメントです。つい先日は、動画ダウンロード補助ツール「L-ytdl」の大幅更新をしたり、練習がてら作ったガバガバ自作ソフトを公開したりしました。別に大した物ではありません。
それが落ち着いた時、ふと思ったのが「よくあるソフトの更新通知とか、どうやって実現してるんだろうな~」ということです。私のよく使うソフトだと"YMM3", "MediaInfo"などで、起動した時に新しいバージョンが有ると「ダウンロードしますか?」というようにメッセージが出ます。それを私もやりたいと思いました。

「どうやって実現してるんだろう」と述べましたが、想像はつきます。ネット上に更新情報を置いておき、ソフトに確認させているのです。
というわけで、今回は「ネット上にデータを用意しておいて、プログラム等で利用できるようにする方法」を記事にします。私では使い切れない長物なので、もっとプログラム開発できる方に有効に使っていただけたらな、と思います。たぶん他に良い方法があるので、ご存知の方はコメントで紹介をお願いします。
クラウドストレージの選定
まず、"データを置いておくインターネット上の場所"を探します。その道の人なら自分でサーバーやサイトを持っていたりするでしょうが、私は何もありません。なので、無料のクラウドストレージ(オンラインストレージ, クラウドドライブ)から使えそうなのを探します。
検索すると色々出てきますが、新しいアカウントを作るのが嫌なので既にアカウントを持っているサービスから選ぶことにしました。
・Google ドライブ 15GB ~ 2TB
・OneDrive 5GB ~ 1TB
・Dropbox 2GB ~ 5TB ~
・Amazon Drive 5GB ~ 30TB
・iCloud Drive 5GB ~ 2TB
アカウントを持っている方も多いであろうサービス5つ。AmazonDriveはつい最近気付きました。この中から使うクラウドストレージを選びます。
まず、AmazonDriveとiCloudDriveは除外します。理由は個人の都合で、AmazonDriveはまだ1度も使ったことが無い、iCloudDriveはiPhoneのバックアップや書類のデータもあるので容量を圧迫したくないのが理由です。
次に、残ったGoogleDrive, OneDrive, Dropboxにそれぞれテスト用のファイルをアップロードし共有状態にして、プログラムで使えるか試します。プログラムは第三者なので、ファイルを誰でもダウンロードできるように共有状態にしておく必要があります。
・・・結論から言うと、使えそうなのはDropboxだけでした。
ネックなのは、「直リン」と呼ばれる"ファイルを直接ダウンロードするURL"の用意です。共有した時に有効になるURLは、開くとファイルのプレビュー画面になるため、人ではないプログラム如きではファイルを正常にダウンロードすることができず失敗してしまいます。
なので、ファイルを直接ダウンロードするURL(直リン)をちゃんと用意してやる必要があるのですが、私が調べた結果、'21年現在、GoogleDriveとOneDriveで直リンを作成する方法は無いようです。検索するといくつか方法が出てきますが、どれも使えませんでした。サービスのシステムアップデートで使えなくなったんでしょうね…。頓智を利かせて無理矢理直リンを作成することにも成功しましたが、どちらのURLもいずれシステムアップデートで使えなくなりそうなクソ長URLでした。OneDriveはサービス上でファイルの編集もできるので使えたら良かったんですけどね…。
ということで、クラウドストレージはDropboxを利用することにしました。
直リンの作成
Dropboxの直リン作成は簡単です。しかも公式ヘルプも有ります。ファイルをアップロードし、共有状態にしてリンク(URL)をコピーしたら、
https://www.dropbox.com/s/otamesi7url/test.json?dl=0
https://www.dropbox.com/s/otamesi7url/test.json?request=0
↓
https://www.dropbox.com/s/otamesi7url/test.json?dl=1
という感じで、ファイル名の後ろを「?dl=1」にします。これで、"ファイルを直接ダウンロードするURL"の完成です。
プログラム側の実装
ネット上にデータを用意しダウンロード(読み込み)できるようにしたので、次はプログラム側を対応させます。私はPythonで書きますが、他の言語でも可能なはずです。
import urllib.request
import json
import time
url ="""https://www.dropbox.com/s/otamesi7url/test.json?dl=1"""
Time =time.time()
try:
Str =urllib.request.urlopen(url).read()
except:
Str ="{}"
print("conect "+str(round((time.time()-Time)*1000))+"ms")
Dict =json.loads(Str)
print("")
for tp_Dict in Dict:
print(tp_Dict+":"+str(Dict[tp_Dict]))
print("")
urllibモジュールでDropboxのファイルを読み込みます。今回用意したファイルはJSON形式のデータなので、読み込んだ後にjsonモジュールでPythonのオブジェクトに戻します。
実行した結果、正常にデータを読み込むことができました。しかし、接続開始から読込完了まで400ミリ秒~1.5秒のムラがあるのが難点です。ファイル自体は45byte(0.045KB)です。
データの更新
データに何か変更点や追加情報(私の場合で言うアプデ情報)があれば、データを更新しないといけません。最後はその方法です。
データを更新するには、Dropboxのファイルを上書きします。上書きは簡単で、ファイルがある場所に同じ名前のファイルをドラッグ&ドロップでアップロードするだけです。これで、共有状態やリンクURLをそのままに内容を更新できます。
実際にドラッグ&ドロップでファイルを上書きして更新し、プログラムを実行したところ、更新後のデータを読み込むことができました。
いかがだったでしょうか。今回は「ネット上にデータを用意しておいて、プログラム等で利用できるようにする方法」でした。私はこの手の専門でも何でもなく趣味でやっている者なので、未熟な点があるとは思いますが、とりあえず目的は達成できたので満足しています。
記事の導入でも述べたように、これより良い方法があればぜひコメントで宣伝してこの記事を読む他の方に共有していってください。よろしくお願いします。
-
次の記事これより新しい記事はありません。
-
前の記事2020-07-12 23:43:42VFR→CFR の変換はAviUtlでしよう / 動画コンテナに入るコーデック調査&一覧
広告