рдЧреНрд░реВрд╡реА рдкрд░ рдЫреЛрдЯреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдореЗрдВ - рдПрдХ рдФрд░ред
рдкрд┐рдЫрд▓рд╛: рдЬреАрдореЗрд▓ рдХреЗ
рдмрдбрд╝реЗ рдкрддреНрд░ , рдЕрддрд┐рд░рд┐рдХреНрдд
рд╡реНрдпрд╛рдпрд╛рдо (LATEX)
рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрд╕рдПрдордПрд▓ рдФрд░ рдЧреНрд░реВрд╡реА рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджрд┐рдЦрд╛рддреА рд╣реИред рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо XML рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд░рд╛рдорджрд╛рдпрдХ рдЬрд╝рдЬрд╝рд╢рдХреА рдХреЛ рдЪреБрдирдирд╛ рдЪреБрдирддреЗ рд╣реИрдВред
рдРрд╕рд╛ рдХреНрдпреЛрдВ? - SQL рд╣рдореЗрдВ (рдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ) LJ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрдХреБрдЫ рдмрддрд╛рдПрдЧрд╛ - рдЖрдБрдХрдбрд╝реЗ, рдЖрдБрдХрдбрд╝реЗ, рдЯреИрдЧреНрд╕ - рдЖрдБрдХрдбрд╝реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рдХрд▓реНрдкрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рдкрд╣рд▓реЗ рд╣рдореЗрдВ XML рдореЗрдВ LJ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ -
ljdumpрдЖрдкрдХреЛ рдкрд╛рдпрдерди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЖрдИрдбреАрдПрд▓рдИ (рдкрд╛рдпрдерди рдЬреАрдпреВрдЖрдИ) рдЦреЛрд▓рдирд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╣ рд╕рдм рдХреБрдЫ рдкреВрдЫреЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкрд╛рд╕ LXXX - рдкрджреЛрдВ рдФрд░ CXXX - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧреАред
рдФрд░ рдЗрди XMLs рдкрд░ рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВрдЧреЗред
рдЗрд╕ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛, рдПрдореНрдмреЗрдбреЗрдб рд╣рд╛рдЗрдкрд░рд╕реЛрдирд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ (HSQLDB) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рд╕реЗ рднреА рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ JDBC рдбреНрд░рд╛рдЗрд╡рд░ рдЖрдкрдХреЗ рд╡рд░реНрдЧрдкрде рдореЗрдВ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдХреЗрд╡рд▓ рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЙрджреНрдпрдо рдореЗрдВ, рдХреЛрдИ рднреА рд╕рднреА XML рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рд╡реЗ рдПрд╕рдПрдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ), рдФрд░ рдХреЛрдИ рднреА рд╕реАрдзреЗ рдПрд╕рдХреНрдпреВрдПрд▓ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ (рдФрд░ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓, рддреИрдпрд╛рд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ, рдмреИрдЪ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╣реЛрдЧрд╛)ред
рдХрд┐ рд╣рдо рдкрд░рд╕рд┐рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
<?xml version="1.0"?> <event> <itemid>1</itemid> <eventtime>2006-04-09 16:52:00</eventtime> <url>http://my-ljnick.livejournal.com/460.html</url> <event_timestamp>1144601520</event_timestamp> <reply_count>3</reply_count> <props> <commentalter>1148051408</commentalter> </props> <subject> </subject> <event> </event> <anum>204</anum> </event>
рдпрд╣рд╛рдБ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
import groovy.sql.Sql import java.sql.Timestamp def sql = Sql.newInstance("jdbc:hsqldb:file:lj", "sa", "", "org.hsqldb.jdbcDriver") // delete table if previously created try { sql.execute("drop table POST")} catch (Exception e) {} try { sql.execute("drop table COMMENT")} catch (Exception e) {} // create table sql.execute('''create table POST ( id integer not null primary key, url varchar(100), subject varchar(100), text varchar(10000), postdate timestamp )''') sql.execute('''create table COMMENT ( id integer not null primary key, postid integer, user varchar(100), subject varchar(100), text varchar(10000), commentdate timestamp, parentcomment integer )''') sql.execute(''' alter table COMMENT add constraint c_postid foreign key (postid) references POST (id) ''') def dir = "D:\\development\\ljdump-1.5.1\\my_lj\\" List<File> files = new File(dir).listFiles().findAll { it.name.startsWith("L") } files.each { record -> def event = new XmlSlurper().parse(record) int id = Integer.parseInt(event.itemid.text()) Date d = Date.parse("yyy-MM-dd HH:mm:ss", event.eventtime.text()) //No time zone java.sql.Timestamp sqlDate = new java.sql.Timestamp(d.time) String url = event.url.text() String subject = event.subject.text() String text = event.event.text() sql.execute("insert into post (id,url,subject, text, postdate) values ($id, $url, $subject,$text,$sqlDate )") File commentsFile = new File(dir + record.name.replace('L', 'C')); if (commentsFile.exists()) { def comments = new XmlSlurper().parse(commentsFile).comment comments.each() { comment -> String state = comment.state.text() if (!"D".equals(state)) { // not deleted int commentid = Integer.parseInt(comment.id.text()) String user = comment.user.text() String parentIdStr = comment.parentid.text() int parentid = 0; if (!parentIdStr.isEmpty()) Integer.parseInt(parentIdStr) Date commentDate = Date.parse("yyy-MM-dd HH:mm:ss", comment.date.text().replace('T',' ')) Timestamp sqlCommentTime = new Timestamp(commentDate.time) String commentsubject = comment.subject.text(); String body = comment.body.text() sql.execute("insert into comment (id,user,subject,text,commentdate,parentcomment, postid) values ($commentid,$user, $commentsubject, $body, $sqlCommentTime, $parentid, $id)") } } } } sql.close();
рдмреЗрд╢рдХ, рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1. рдкреЛрд╕реНрдЯ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рд░рдЦреЗрдВ (рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрджрд┐ рдЖрдк рд╕рдореБрджрд╛рдп рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
2. рдмрдирд╛рдУ рдпрд╣ рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ URL рдорд┐рд▓рддрд╛ рд╣реИ
рдЖрдк рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
1. рдЯреИрдЧреНрд╕ рдХреЛ рд╕реЗрд╡ рдХрд░реЗрдВ
2. рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ
3. рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ
рдЖрдк
рдЧреНрд░реИрдм рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ (рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдореИрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ :(
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
50 рд╕реЗ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкреЛрд╕реНрдЯ рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВ:
@Grab('hsqldb:hsqldb:1.8.0.7') import groovy.sql.Sql Sql sql = Sql.newInstance("jdbc:hsqldb:file:lj", "sa", "", "org.hsqldb.jdbcDriver") sql.eachRow("select subject, url, (select count (*) from comment where postid = mypost.id) as numcom from POST as mypost order by numcom desc") { row -> if (row.numcom>50) println row}
рд╡рд╣ рд╕рдм рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред