tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【C#】iTunes COM Interface & Gapi.NET

5月からWeb系会社に転職するんで、必要に迫られてC#の復習。
でも普通に勉強なんてしてらんないんで、メンテナンスがてらにいじってる。
ってことでITunEsTooLの処理一部。

たぶんもう一生使わない。

iTunes COMGapi.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を入れるということで自宅で試した。

会社のCentOSApacheが入ってるのでTomcatが同時に起動できるかの確認を兼ねて。

 

Oracle JDKのインストール

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

 

f:id:tekitoumemo:20150112235741p:plain

こんな感じで完成

apache入れると自動起動するけどTomcatのポート8080だから大丈夫みたい。