(改良版)macOSで撮ったスクリーンショットを日付フォルダへ自動で振り分ける
以前書いたこの記事の改良版です。 sakanaaas.hateblo.jp
その記事のスクリプトは問題なく動いていたのですが、フォルダが増えてくると見づらいよね問題がでてきました。
こんな感じ。
月が変わったら前月のフォルダはひとまとめにしたい!
処理の流れ
- 日ごとのフォルダが追加されたら前月のまとめフォルダがあるか確認、無かったら月が変わったとみなす。
- まとめフォルダ作成。
- 前月のフォルダをまとめフォルダにアーカイブ。
後半が追加した部分。
bashIFS=$'\n' ssdir=/Users/[ユーザー名]/Pictures/ScreenShots today=$(date +"%Y%m%d") this_month=$(date +"%Y%m") last_month=$(date -v -1m +"%Y%m") for input in "$@" do if [ -f $input ]; then if [ ! -d $ssdir/$today ]; then mkdir $ssdir/$today fi mv $input $ssdir/$today fi input_name=${input##*/} # 8桁の数字のフォルダか確認 if [ -d $input ] && [ $input_name=[0-9]{8} ]; then # 前月のアーカイブフォルダがあるか確認 if [ ! -e $ssdir/$last_month ]; then # 無かったら作る mkdir $ssdir/$last_month # $ssdir内の前月のフォルダを1つのフォルダにまとめる mv $ssdir/${last_month}[0-9][0-9] $ssdir/$last_month fi fi done
こんな感じにできたよん。
運用でカバー
まとめ
夏、雨。
PythonでSpotify APIから曲をプレイリストに追加する(spotipy)
音楽プレーヤーをプログラムからいろいろいじれたら面白いなと思っていたのですが、最近、spotifyがAPIを提供しているということを知ったのでやってみました。 GitHubにサンプルコードもいくつかあってやりやすいです。
spotipy/examples at master · plamere/spotipy · GitHub
流れ
- Spotifyにアプリ登録申請をしてIDとかをゲットする
- プレイリストを作成する
- 曲を検索してIDをゲットする
- 作成したプレイリストに曲を追加する
環境など
ちなみに私はSpotifyの月額課金していて、以下の内容がフリープランでもできるかは試せていません。。。
準備
mac用のデスクトップアプリをダウンロード
ここからダウンロードできます。 確認するときとかに便利。
アプリを登録
- 開発者用のページにアクセス
ページ上部の[MyApp]→[CREATE AN APP]
こんな感じで入力。
- Application Name: MyFirstApp
- Aplication Description: MyFirstApp
作成できたら[Client ID]とかが表示されているページに移るので以下を入力。
- Redirect URI: http://127.0.0.1:8080/
Redirect URIsは間違えないようにする あとは空欄でOK。入力したらADDしてSAVE。
アプリケーションサーバに環境変数を登録
bash_profile
とかに書いておく
$ vi ~/.bash_profile export SPOTIPY_CLIENT_ID='[登録したspotifyアプリのClient ID]' export SPOTIPY_CLIENT_SECRET='[登録したspotifyアプリの[Client Secret]' export SPOTIPY_REDIRECT_URI='http://127.0.0.1:8080/'
環境変数を読み込む
$ source ~/.bash_profile
SpotifyのPython SDKをインストール
$ pip install spotipy
トークン発行/更新モジュールを作成
作業ディレクトリを作成
$ mkdir spotify_handson $ cd spotify_handson
# spotify_token.py import spotipy import spotipy.util as util class Spotify_token: def __init__(self, username): self.username = username self.scope = 'playlist-modify-public' def set(self): token = util.prompt_for_user_token(self.username, self.scope) return token
プレイリストを作成
sampleコードを参考に作成しました。
$ vi create_playlist.py
# create_playlist.py # Creates a playlist for a user import sys import pprint import spotipy from spotify_token import Spotify_token # usage # $ python create_playlist.py [username] [playlist_name] username = sys.argv[1] playlist_name = sys.argv[2] ST = Spotify_token(username) token = ST.set() sp = spotipy.Spotify(auth=token) sp.trace = False playlists = sp.user_playlist_create(username, playlist_name) pprint.pprint(playlists)
実行
$ python create_playlist.py [username] MyFavorite
初回だけブラウザにこんな画面が表示されるのでOKを押す。
そうするとリダイレクトされるのでリダイレクト先の
http://127.0.0.1:8080/?code=
から始まるURLをまるっとコピーする。ターミナルに戻って
Enter the URL you were redirected to:
のあとにコピーしたURLをペーストしてEnterする成功するとプレイリストが作成され、結果が出力されるので
id
をメモっておく。spotifyアプリでプレイリストが作成されたか確認するとわかりやすい。もしかしたらアプリへの反映までのラグがあるかも。
実行したディレクトリに
.cache-[username]
というファイル名ができていて、これ以降はこのファイル内の情報を使って勝手にアクセストークン更新とかもやってくれる。
曲のIDを検索
プレイリストに追加するには曲ごとにつけられたユニークなIDを指定する必要があるので、曲名とかアーティスト名などのキーワードで検索する。
sampleコードを参考に作成しました。
# search.py # shows artist info for a URN or URL import spotipy import sys import pprint from spotify_token import Spotify_token # usage # $ python search.py [ Keyword you want to search ] username = sys.argv[1] search_str = sys.argv[2] ST = Spotify_token(username) token = ST.set() sp = spotipy.Spotify(auth=token) result = sp.search(search_str, limit=10) for item in result['tracks']['items']: print(item['name']) print(item['id']) print('')
ここでは検索結果出力を10件に絞っています。検索するキーワードはアーティスト名でも曲名でもOK。
$ python search.py [username] 岡崎体育
曲名とその曲のIDが表示される
曲をプレイリストに追加
取得したプレイリストIDとトラックIDをもとに、曲を追加します。
# add_tracks_to_playlist.py import pprint import sys import spotipy import spotipy.util as util from spotify_token import Spotify_token if len(sys.argv) > 3: username = sys.argv[1] playlist_id = sys.argv[2] track_ids = sys.argv[3:] else: print("Usage: %s username playlist_id track_id ..." % (sys.argv[0],)) sys.exit() ST = Spotify_token(username) token = ST.set() if token: sp = spotipy.Spotify(auth=token) sp.trace = False results = sp.user_playlist_add_tracks(username, playlist_id, track_ids) print(results) else: print("Can't get token for", username)
$ python add_tracks_to_playlist.py [username] [playlist_id] [track_id]
snapshot_idが返ってくる。
デスクトップアプリから確認すると追加されている。
まとめ
夢が広がりング。