【MyScripts】簡単Webスクレイピング

一つ前の投稿(歌詞取得スクリプト「SimpleLyrics」)からの続きです。

MyScriptsを使ってWebスクレイピングを行う手順を簡単に説明します。
ここではDOMは利用せずに、単純な正規表現を使った方法を紹介します。

1.Webページをダウンロードします。

// Webページを取得するための
// ユーティリティ関数
function httpGet(url) {
var xhr = new XMLHttpRequest();
xhr.open(“GET”, url, false);
xhr.send(null);
return xhr.responseText;
}

// 再生中のアーティスト名と曲タイトルを使って
// 検索用のURLを構築します
var listUrl=”http://m.kget.jp/result.php?cat=0&artist=”+encodeURIComponent(SONG.artist)+”&title=”+encodeURIComponent(SONG.title)+”&tieup=&phrase=”;

// Webサイトで検索して
// 検索結果のページを取得します(※1)
var listPage=httpGet(listUrl);

// 検索結果の1件目の曲IDを取り出して
// 歌詞ページのURLを構築します(※2)
var resultIndex=listPage.match(/song=[0-9]+/g)[0];
var lyricsUrl=”http://m.kget.jp/lyric.php?”+resultIndex;

// 歌詞ページを取得します
var lyricsPage=httpGet(lyricsUrl);

これでスクレイピング対象の文字列をlyricsPage変数に取得できました。
(ここでは検索処理を行なっていますが、検索が不要なWebページでは上記※1と※2は不要です)

2.lyricsPageから必要な箇所を抜き出します。

あらかじめ歌詞ページのソースを確認しておき、<div class=”lyric”>から始まる部分に歌詞があることを確認しておきます。

// ページの中から歌詞を抜き出します
lyricsPage.match(/<div class=”lyric”>n([sS]+?)<div/m);

([sS]+?) 部分に歌詞が入りますが、これはRegExp.$1内に保存されています。

3.最後に、歌詞部分の中に含まれている不要な改行タグ <br /> を一括削除します。

// 不要な改行タグを削除します
var lyrics=RegExp.$1.replace(/<br />/g, “”);

これで不要なタグが入っていない歌詞部分だけをlyrics変数に取り出すことが出来ました。

あとはこのデータを好きなように加工できます。

上記のURLを変更したり、スクレイピングの正規表現を変更していろいろと試してみると面白いと思います。

 

【MyScripts】歌詞取得スクリプト「SimpleLyrics」

再生中の曲の歌詞を検索、表示する「SimpleLyrics」スクリプトを作りました。

歌詞は「歌詞GET」から取得します。歌詞の著作権についてはサイトを参照して下さい。

MyScriptsへの登録はこちらからどうぞ。


/* mdoc
概要:: 再生中の曲の歌詞を検索、表示します
作者:: @unitkay
版数:: 0.0.2
更新:: 2012-09-02 08:57:10
分類:: ミュージック
識別:: simplelyrics
URL::
詳細_______________________________
再生中の曲の歌詞を「歌詞GET」から取得します。
歌詞の著作権についてはサイトを参照して下さい。
___________________________________
*/

// Webページを取得するための
// ユーティリティ関数
function httpGet(url) {
var xhr = new XMLHttpRequest();
xhr.open(“GET”, url, false);
xhr.send(null);
return xhr.responseText;
}

// 再生中のアーティスト名と曲タイトルを使って
// 検索用のURLを構築します
var listUrl=”http://m.kget.jp/result.php?cat=0&artist=”+encodeURIComponent(SONG.artist)+”&title=”+encodeURIComponent(SONG.title)+”&tieup=&phrase=”;

// Webサイトで検索して
// 検索結果のページを取得します
var listPage=httpGet(listUrl);

// 検索結果の1件目の曲IDを取り出して
// 歌詞ページのURLを構築します
var resultIndex=listPage.match(/song=[0-9]+/g)[0];
var lyricsUrl=”http://m.kget.jp/lyric.php?”+resultIndex;

// 歌詞ページを取得します
var lyricsPage=httpGet(lyricsUrl);

// ページの中から歌詞を抜き出します
lyricsPage.match(/<div class=”lyric”>n([sS]+?)<div/m);

// 不要な改行タグを削除します
var lyrics=RegExp.$1.replace(/<br />/g, “”);

// MyScriptsに歌詞を渡して完了
lyrics;

MyScripts1.9をリリースしました

MyScriptsをご愛用いただきありがとうございます。更新内容は以下のとおりです。

・スクリプト一覧画面での検索機能(URLスキームにも対応。myscripts://search?title=URLエンコードした検索語 または myscripts://search?script=URLエンコードした検索語)
・タグ選択用URLスキーム(myscripts://tag?name=URLエンコードしたタグ名)
・タグの一括追加と一括削除
・MyShortcutsとの連携用スクリプト
・カーソル移動用URLスキーム(編集画面からスクリプトを実行したときにのみ有効。myscripts://moveCursorTo?line=行数&c-
olumn=列数)
・アイコンの変更

ダウンロードと詳細についてはこちらからどうぞ

※不具合が見つかっています。HTML表示した際に、myscripts:スキームを使用すると正常に動作しません。この不具合を修正した2.0を申請済みです。リリースまで少々お待ちください。申し訳ありません。

MyScripts1.8をリリースしました

MyScripts1.8をリリースしました。タグ付け機能、クイックメニュー、バックアップなど、使い勝手の向上が主な更新内容です。スクリプトの数が多い方は、一覧画面でスクリプトを長押ししてタグ編集すると、すばやくタグを付けられると思います。 http://t.co/PwdvFqOn

2012-08-09 08:10 via Tweetbot for iOS

WordPressにMyScriptsリンクを投稿する

編集画面のアクションメニューから作成したスクリプト登録用リンクは、これまでWordPressに投稿できませんでしたが、TinyURLを間に挟むことで投稿できるようになります。

スクリプト登録用リンクをTinyURLに変換するスクリプトを作りました。このスクリプトをMyScriptsに登録して、他のスクリプトの編集画面で呼び出すと、スクリプト登録用リンクをTinyURLに変換したものがクリップボードにコピーされます。

TinyURLへの変換スクリプトはこちらからどうぞ:
スクリプト登録用TinyURL

@a_i_t_aさんの「スクリプトをツイート」スクリプトを参考にさせて頂きました。ありがとうございます。

超便利です!RT @a_i_t_a: 新作 #MyScripts スクリプト「スクリプトをツイート」 http://t.co/Lj9P8ayA ←のようなスクリプト登録用リンクをツイートします。(TwitterクライアントはデフォルトではTweetbotに設定されています)
2012-07-02 12:09 via Tweetbot for iOS

MyScripts1.7をリリースしました

いつもご愛用頂きありがとうございます。

このバージョンでは以下の内容を更新しました。
・空の文字がコピーされてしまう場合がありましたので修正しました。
・IS_HTML=trueのときに全画面表示ができるようになりました。

App Storeへはこちらからどうぞ

MyScripts1.6をリリースしました

ご利用ありがとうございます。このバージョンでは以下の内容を更新しました。

・HTMLで表示したときのアンカータグに別アプリのURLスキームがあった場合に、そのアプリを起動できない不具合を修正しました。
・スクリプト一覧画面で、スクリプトを長押しすることでそのスクリプトを編集できます。

App Storeへはこちらからどうぞ

MyScripts1.5をリリースしました

MyScriptsをご愛用頂きありがとうございます。

このバージョンでは以下の内容を更新しました:
・SAVE_JSON、LOAD_JSONで引用符(’)の保存読み込みができない不具合を修正
・HTML表示の中から別のスクリプトを実行したときにSAVE_JSON、LOAD_JSONが動作しない不具合を修正
・MyScriptsアイコンの変更
・CLIPBOARD、ENCCLIPBOARD、IP_ADDRESSパラメータの追加
・FILENAMEパラメータとCOPY関数の機能追加
・jQuery MobileとTwitter Bootstrapライブラリのプリインストール
・拡張キーボードボタンの拡大(iPhoneのみ。設定から変更します)
・バックグラウンド監視の時間切れ通知が蓄積しないように修正

ダウンロードはこちらからどうぞ。

Ver1.5をリリース。UI作成に便利なjQuery Mobileなどのライブラリを追加しました。”MyScripts (350円 評価★★★★½ 11件の評価 1.9MB)” itunes.apple.com/jp/app/myscripts/id492086539?mt=8&uo=4 #SAppInf shareapp.info
2012-06-05 05:06 via Twitter for iPhone

【MyScripts】有志の方々によるスクリプト集

まとめて頂きました。以下のリンクからどうぞ。

様々な方が作られた #MyScripts スクリプトへのリンクをまとめてみました。
【神ツールをうむ神アプリ】MyScriptsスクリプトまとめ【iPhone&iPad】 – NAVER まとめ : http://t.co/WQFzxU4X
2012-06-02 01:16 via Tweetbot for iOS

MyScriptsに外部ライブラリを簡単に登録する方法(例:ecl.js文字コードライブラリ)

#MyScripts に外部JSライブラリを登録する方法(ZIP)
1.SafariでZIPファイルをダウンロード
2.OpenInでGoodReaderに渡して、解凍
3.jsファイルを内蔵ビューアで表示し、OpenInでMyScriptsに渡して、新規スクリプトとして登録
2012-04-07 15:53 via Tweetbot for iOS


この方法で例えば文字コード変換ライブラリのEscape Codec Libraryを #MyScripts に登録できます。OpenInを使うと新規スクリプトを簡単に登録できるので利用してみて下さい。http://t.co/i5dvG6zn
2012-04-07 15:59 via Tweetbot for iOS


登録した外部ライブラリは、#IMPORT文を使って自分のスクリプトから利用できます。先ほどのeclの場合、#IMPORT ecl.js とするだけでEscapeSJIS()などの便利な関数を利用できるようになります。#MyScripts
2012-04-07 16:05 via Tweetbot for iOS


素晴らしい例がこちら!RT @freedomcat: @unitkay ecl.jsというライブラリ用意して、次のコードをopenURLで書いて、外部リンク作って、検索ハブに設定しました。 https://t.co/DYp3v6TB #MyScripts
2012-04-07 16:07 via Tweetbot for iOS


“MyScripts (Unit Kay 350円 評価★★★★ 6件の評価 0.7MB)” http://t.co/YPkryGji #SAppInf http://t.co/x9EfMh42
2012-03-02 22:37 via Tweet Button