読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】YouTubeのURLリストのリンク切れをチェックするためのコード

pandas urllib(urllib2) Python

歌謡ロックbotのリンク切れを直しています。歌謡ロックbotはひたすらYouTubeのPVを流すだけのアカウントで、予め登録した曲のリストから一定時間おきに投稿します。

 

以前はリンク切れカッターが使えたのですが、YouTubeの仕様が変わったのか、このツールでは判定できなくなりました。

 

調べてみたところ、YouTubeAPIを使ってリンク切れをチェックできると書いてあったので、自分で調べてみました。

自サイトに貼りつけたYOUTUBE動画が削除されているか確認する方.. - 人力検索はてな

 

入力

0.8秒と衝撃。 「21世紀の自殺者」  youtu.be/ru4xoKsm9lo 
0.8秒と衝撃。 「POSTMAN JOHN」  youtu.be/dHRMezlbmiE 
0.8秒と衝撃。 「町蔵・町子・破壊」  youtu.be/0NQUAHcecRU 
13*SQUAD 「陽炎」  youtu.be/TAHY2-2VwhA 
9mm Parabellum Bullet 「Black Market Blues」  youtu.be/mNFHg5vQ2pU 
9mm Parabellum Bullet 「Finder」  youtu.be/qIq20zSpanA 

 

出力

  artist track url open
0 ?0.8秒と衝撃。 「21世紀の自殺者」  youtu.be/ru4xoKsm9lo  1
1 0.8秒と衝撃。 「POSTMAN JOHN」  youtu.be/dHRMezlbmiE  1
2 0.8秒と衝撃。 「町蔵・町子・破壊」  youtu.be/0NQUAHcecRU  1
3 13*SQUAD 「陽炎」  youtu.be/TAHY2-2VwhA  1
4 9mm Parabellum Bullet 「Black Market Blues」  youtu.be/mNFHg5vQ2pU  1
5 9mm Parabellum Bullet 「Finder」  youtu.be/qIq20zSpanA  0
6 9mm Parabellum Bullet 「Living Dying Message」  youtu.be/nWgrkY-fCyU  1
7 9mm Parabellum Bullet 「Wanderland」  youtu.be/pA2Xw4C7gcw  1
import pandas as pd

#ファイル読み込み tweet = pd.read_table("kayourock/kayourock.tsv",header=None) tweet.columns = ["artist", "track", "url"]
#YouTubeのURLを入れれば判定結果を返してくれる関数 def urlchecker(url): import urllib url = url.replace("youtu.be/","http://gdata.youtube.com/feeds/api/videos/") f = urllib.urlopen(url) url_open = f.read()
#APIがちゃんとxmlを返す=動画が存在するなら1、返さないなら0 if url_open.startswith("""<?xml version='1.0'"""): rt = 1 else: rt = 0 return rt

#データフレームに判定結果を追加 temp = list() for url in tweet["url"]: temp.append(urlchecker(url)) tweet["open"] = temp
#ファイル出力 tweet.to_csv("kayourock/test.tsv",sep="\t")

今では自動ツイートにEasybotterというPHPコードを拝借して自動投稿してますが、がんばれば「リンク切れしたURLは投稿しない」っていうクライアントも作れそうですね。