iTunesで再生チャートランキングを定期的に自動で作りたい(1)

まずは環境作りから・・・。

MySQLインストールでは以下にはまった。「Cannot start SSH tunnel manager」

 

 

 

 

 

Home>View>Outputよりログを参照すると同様のメッセージが多発。

ImportError: DLL load failed: �w�肳�ꂽ���W���[�������‚���܂���B

Traceback (most recent call last):

File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\sshtunnel.py”, line 6, in

import socket

File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\Python\socket.py”, line 46, in

import _socket

Tracはインストールしてなかったが、Pythonhome環境変数をセットしてみた。

Traceback (most recent call last):

File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\sshtunnel.py”, line 6, in <module>

import socket

File “C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE\Python\socket.py”, line 46, in <module>

import _socket

ImportError: DLL load failed: �w�肳�ꂽ���W���[�������‚���܂���B¥

断念。。。

ただ、DataModelingは使えたのでER図を書いてDDLを自動生成してテーブルを作る。

 

 

 

 

 

 

 

 

DDLはテーブルを選んで右クリックで自動生成。ついで、EclipseJPAプロジェクトを作成し、右クリック>新規作成>エンティティでエンティティを作成。こんなクラスができた。

import java.io.Serializable;

import javax.persistence.*;

import java.util.Date;

import java.util.Set;

/**

* The persistent class for the tbl_update database table.

*

*/

@Entity

@Table(name=”tbl_update”)

public class TblUpdate implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@Column(name=”Trac_ID”)

private int trac_ID;

@Column(name=”Play_Count”)

private String play_Count;

@Column(name=”Type”)

private String type;

@Temporal( TemporalType.TIMESTAMP)

@Column(name=”Update_data”)

private Date update_data;

//bi-directional many-to-one association to TbmTrack

@OneToMany(mappedBy=”tblUpdate”)

private Set<TbmTrack> tbmTracks;

public TblUpdate() {

}

public int getTrac_ID() {

return this.trac_ID;

}

public void setTrac_ID(int trac_ID) {

this.trac_ID = trac_ID;

}

public String getPlay_Count() {

return this.play_Count;

}

public void setPlay_Count(String play_Count) {

this.play_Count = play_Count;

}

public String getType() {

return this.type;

}

public void setType(String type) {

this.type = type;

}

public Date getUpdate_data() {

return this.update_data;

}

public void setUpdate_data(Date update_data) {

this.update_data = update_data;

}

public Set<TbmTrack> getTbmTracks() {

return this.tbmTracks;

}

public void setTbmTracks(Set<TbmTrack> tbmTracks) {

this.tbmTracks = tbmTracks;

}

}

クラスの自動生成とともに、persistence.xmlも更新されている!

<?xml version=”1.0″ encoding=”UTF-8“?>

<persistence version=”2.0″ xmlns=”http://java.sun.com/xml/ns/persistence” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>

<persistence-unit name=”JPA_test”>

<class>TblUpdate</class>

<class>TbmTrack</class>

</persistence-unit>

</persistence>

DBへの登録は下記のようなクラスで可能。

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.EntityTransaction;

import javax.persistence.Persistence;

public class test {

public static void main(String[] args) {

TbmTrack track = new TbmTrack();

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“JPA_test”);

EntityManager em = emf.createEntityManager();

track.setTrack_id(1);

track.setArtist(new String(“test”));

EntityTransaction tx = em.getTransaction();

tx.begin();

em.persist(track);

tx.commit();

em.close();

emf.close();

}

}

予想通りDBからDDLを抽出してしまえば、残るソースで書くのはほんと僅か。これじゃあ言語毎の生産性も違いはあまりでない気がする。

iTunesXMLファイルからは真・plist形式のxml読み込み用digester-rules(およびクラス)があったので、ここから拝借して秒殺。

面倒なのは前回のダンプとの差分をとってチャートを出したりする、データの持ち方の設計あたり。

簡単に作れるフレームワークが無いものか。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です