【C#】iTunes COM Interface & Gapi.NET
5月からWeb系会社に転職するんで、必要に迫られてC#の復習。
でも普通に勉強なんてしてらんないんで、メンテナンスがてらにいじってる。
ってことでITunEsTooLの処理一部。
たぶんもう一生使わない。
iTunes COMとGapi.NETがキーとなる感じ。
・曲情報を取得(iTunes COM)
int highID; int lowID; iTunesApp app = new iTunesApp(); IITFileOrCDTrack file = null; foreach (IITTrack files in app.libraryPlaylist.Tracks) { try { file = (IITFileOrCDTrack)files; } catch (Exception) { continue; } //get_ITObjectPersistentIDHighの引数はIITTrack、IITFileOrCDTrackどっちでもOK highID = itunes.get_ITObjectPersistentIDHigh(file); lowID = itunes.get_ITObjectPersistentIDLow(file); }
ループでIITTrackでなくIITFileOrCDTrackにすると暗黙の型変換を行ってくれるんだけど、
編集不可能なファイルがあったりすると落ちる(マジでココの人ありがとう
だから明示的にキャストしてtry catchで囲ってる感じ(なにがあるかわかんねーからExceptionでcatchしてる、プログラマ失格。
get_ITObjectPersistentIDHighについては後述。
・任意の曲情報を取得(iTunes COM)
IITTrack track; IITTrackCollection trackCol; track = trackCol.get_ItemByPersistentID(highID,lowID);
iTunesの外部ソフトって再生中に何かしらするってものが多い。わざわざ再生なんかしたくねー曲がいっぱいあるからiTunes COMを読み漁ったらget_ItemByPersistentIDってのがあった。Name(名前検索)、PlayOrder(曲順)とかもあるけど、重複曲があったり、曲順とか常に変更するから全く使い物にならん。ItemByPersistentIDって名前から永続的に持ってる固有のID的な感じで読みとれた(恐らくTOEIC100点台の英語力)からこれでいいはず。引数は上記のとおりに取得出来る。
・Google検索で画像のURLを取得(Gapi.NET)
SearchResults results; results = Searcher.Search(SearchType.Image, Searchword); foreach (SearchResult result in results.Items) { //WebClient使って画像のダウンロードが可能(URLプロパティに検索結果が入ってくる }
Searchの第一引数のSearchTypeをImageにする。
一回の検索で取得可能な回数は8回まで。たしかSearchの第三引数かなんかで検索開始位置を設定出来たような。
要は無限で検索可能っぽい。
どうしてもGit使いたいからVisual Studio2013Expressをインストール中。
今後使えるプログラマはGitHuber(GitHubを使いこなす人(俺命名)かそうでない人で分けられる気がする。
【C#】「GDI+ で汎用エラーが発生しました。」ってなんだよ
ITunEsTooLってC#アプリをノリで作った。
能力が無い癖にノリで作ったから悲惨。
どう変更していったか以下の記載。
・処理
ダウンロードした画像が10K以下だったら画像を破棄。
10K以上だったら取得。
で画像を確認してもらってオッケイだったら保存って流れ(ココは面倒だから書かない。
要はそこそこの画像を確認して納得したら保存的な流れ。
・最初
WebClient wc = new WebClient(); wc.DownloadFile(URL, Filename); FileInfo fi = new FileInfo(Filename); if (fi.Length < 10000) { //ココでファイル削除 } wc.Dispose();
消すかも知れない画像をファイルに落としてる時点でクソ
・後
WebClient wc = new WebClient(); byte[] pic = wc.DownloadData(URL); if (pic.Length > 10000) { using (MemoryStream st = new MemoryStream(pic)) try{ using (Image imgSrc = Image.FromStream(st)) { Image IMG = new Bitmap(imgSrc); } } catch (ArgumentException) { //違うURL検索 } //画像保存(IMG.Save)やらなんやら } wc.Dispose();
ArgumentExceptionはたまにDownloadDataが機能しないときがあって
例外(使用されたパラメーターが有効ではありません。)が発生するからその対処として。
FromStreamしたImageでSaveするとの例外(GDI+ で汎用エラーが発生しました。)が
発生する場合がある。
対処法がココに書いてあって
別のBitmapに対処するとオッケイみたい。
ってかURL上の画像のファイルサイズって取得出来んのかな?
Ubuntu 12.04にGroupSessionの環境を構築してみた。
会社のCentOSにGroupSessionを入れるということで自宅で試した。
会社のCentOSにApacheが入ってるのでTomcatが同時に起動できるかの確認を兼ねて。
add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java7-installer
Ubuntu12.04のリポジトリにはJAVAが登録されていないので、追加。
インストールされたか確認
/usr/sbin/update-java-alternatives -l
管理者だから/usr/lib/jvm/java-7-oracleに配置されている?知らね。
・Tomcat Aopacheのインストール
会社のはXWindowが入ってないのでwgetで(CentOSで使えるのか知らね。)
wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.tar.gz
ファイルのURLはDepeloper Toolで検索(普通はどうやってんの?)
落としたファイルを解凍
tar -zxvf apache-tomcat-7.0.57.tar.gz
環境変数の設定
.bashrcに以下を追加。
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export CATALINA_HOME=/usr/local/java/apache-tomcat-7.0.57
ってかJAVA_HOMEに設定しなくともグループセッションは起動する。複数バージョンをインストールしていた時に明示的に指定する必要があるのかな?
GroupSessionのインストール
wget http://dl1.gs.sjts.co.jp/v4/download/files/4.3.1/gsession.war
tomcatディレクトリ配下にwebappsディレクトリがあるのでそこに配置)
Tomcatを起動
/usr/local/java/apache-tomcat-7.0.57/bin/startup.sh
停止
/usr/local/java/apache-tomcat-7.0.57/bin/shutdown.sh
こんな感じで完成
apache入れると自動起動するけどTomcatのポート8080だから大丈夫みたい。