無事に当初の目的であった3I/ATLASの写真をNASA OPEN APIから取得することに成功した筆者であるが、本日(12月3日)もダブルクリックしてみると"巨大なブラックホールに飛び込む"視点をスーパーコンピューターで可視化した画像であるそうだ。太陽の400万倍というとてつもない質量を持つブラックホールに向かってカメラを突っ込むとこのような視覚になるとのこと、恐ろしくも興味深い。
インストールするツールが多くなるとローカルドライブは少しずつ削られていく。圧迫され、ドライブの容量を見るのが嫌になってくるころには買い替え検討も頭をよぎる。やはり、様々なクラウドの利便性を活かしたい。OSの垣根を越え、PC/モバイルの垣根も越えた環境に依存しないクラウド環境にストックした宇宙写真を集めておきたくなる。
○OneDriveへの保存は1行追加の簡単カスタマイズ
Windowsの場合は、OS標準のOneDriveに保存するようにPowerShellのコードを変更するだけだ。筆者のOneDriveのPATHは、C:\Users\user\OneDrive\であるが汎用性のある"$env:OneDrive\$today.jpg"にして、もうひとつInvoke-WebRequestを追加する。
Invoke-WebRequest -Uri $imageUrl -OutFile "$today.jpg"
Invoke-WebRequest -Uri $imageUrl -OutFile ""$env:OneDrive\$today.jpg""
こうすることで、スクリプト実行フォルダ内とOneDrive内に西暦日時.JPGが保存される。OneDriveの方は、自動的にオンラインに保存される仕組みだ。1行のコードの追加で、アプリやスマホでシームレスに宇宙画像を眺める機会も増やせる。
○PythonとGoogle Drive APIでGoogleドライブ保存
マルチクラウドな世界である。用途によってクラウドも使い分けたいところだ。翻訳にGoogle Cloud APIを稼働させてみた筆者だが、Google Drive APIはリクエスト数が数回や数十回程度であれば気にすることなく使える。
gdrive2.py
from pydrive2.auth import GoogleAuth
from pydrive2.drive import GoogleDrive
from datetime import datetime
def main():
gauth = GoogleAuth()
gauth.LocalWebserverAuth() # OAuth認証(ブラウザが開く)
drive = GoogleDrive(gauth)
# 今日の日付ファイル名 (251203.jpg)
today_filename = f"{datetime.now():%y%m%d}.jpg"
file = drive.CreateFile({'title': today_filename})
file.SetContentFile(today_filename) # ローカルにある同名ファイルを指定
file.Upload()
print(f"アップロード完了。ファイルID: {file['id']}")
if __name__ == '__main__':
main()
settings.yaml
client_config_backend: file
client_config_file: client_secrets.json
save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json
oauth_scope:
- https://www.googleapis.com/auth/drive.file
Google CloudでGoogle Drive APIを有効にしOAuth同意画面を構築、テストユーザーに自身のGmailを登録する。その際、表示されるjsonファイルをダウンロードしclient_secrets.jsonとして、上記gdrive2.pyとsettings.yamlと同一フォルダに保存しておく。Pythonを実行すると、Googleのユーザー認証を通してcredentials.jsonが生成されて、無事にGoogleドライブにアップロードされた。
○一回でOneDriveとGoogleDriveに保存できるように統合する
同じフォルダ内にPowerShellスクリプト(PS1)とPythonファイル(py)を入れておけば、一回のクリックで今日の一枚を表示、OneDriveとGoogleドライブへのダブル送信も可能なはずである。PowerShellのPS1ファイルにPythonファイル呼び出しの
python .\gdrive2.py
のみを追加する。
$url = "https://api.nasa.gov/planetary/apod?api_key=●●●●●●●●●●●●●●●●●●"
$response = Invoke-RestMethod -Uri $url
$imageUrl = $response.url
$explanation = $response.explanation
#NASAの今日の一枚(APOD)URL作成
$today = Get-Date -Format "yyMMdd"
$pageUrl = "https://apod.nasa.gov/apod/ap$today.html"
# Google翻訳APIキー
$googleApiKey = "●●●●●●●●●●●●●●●●●●"
$googleUri = "https://translation.googleapis.com/language/translate/v2?key=$googleApiKey"
# 翻訳リクエストのボディ(Basicモデル)
$body = @{
q = $explanation
source = "en"
target = "ja"
format = "text"
model = "base"
} | ConvertTo-Json
# 翻訳API呼び出し
$translationResponse = Invoke-RestMethod -Uri $googleUri -Method Post -Body $body -ContentType "application/json"
$translatedText = $translationResponse.data.translations[0].translatedText
if ($imageUrl) {
Write-Host "画像をダウンロード中..."
Invoke-WebRequest -Uri $imageUrl -OutFile "$today.jpg"
Invoke-WebRequest -Uri $imageUrl -OutFile "$env:OneDrive\$today.jpg"
python .\gdrive2.py #同一フォルダ内のpythonスクリプト呼び出し
Write-Host "画像を保存しました。"
}
# 結果表示
Write-Host "NASAの今日の一枚(APOD)ページはこちら: $pageUrl"
Write-Host "今日のNASA画像のURLはこちら: $imageUrl"
Write-Host "今日のNASA画像の説明(翻訳):"
Write-Host $translatedText
Read-Host "終了するには、Enterキーを押してね"
.











![[USBで録画や再生可能]Tinguポータブルテレビ テレビ小型 14.1インチ 高齢者向け 病院使用可能 大画面 大音量 簡単操作 車中泊 車載用バッグ付き 良い画質 HDMI端子搭載 録画機能 YouTube視聴可能 モバイルバッテリーに対応 AC電源・車載電源に対応 スタンド/吊り下げ/車載の3種類設置 リモコン付き 遠距離操作可能 タイムシフト機能付き 底部ボタン 軽量 (14.1インチ)](https://m.media-amazon.com/images/I/51-Yonm5vZL._SL500_.jpg)