root/trunk/install/perl/getxml2db.pl

リビジョン 60, 6.1 kB (コミッタ: sorshi, コミット時期: 17 年 前)

recwrap.pl:
 多重トラコン抑制。
 激しいCPU負荷のかかるH.264トランスコード処理はCPUコア数を上限としたプロセス数までしか同時起動しないように。わりと大ざっぱな実装。

getxml2db.pl:
 アニメ番組名とサブタイトル&の実態参照を解くように変更。
 データ追加で不具合がでてたのでAutoCommit?使うように戻した。

  • svn:executable 属性の設定値:
Line 
1 #!/usr/bin/perl
2 #
3 # Anime recording system foltia
4 # http://www.dcc-jpl.com/soft/foltia/
5 #
6 # usage :getxml2db [long]
7 #しょぼいカレンダー<http://cal.syoboi.jp/>から番組データXMLを取得しfoltia DBにインポートする
8 #
9 #オプション
10 #long:2週間分取り込む。このモードで一日一回回せばよいでしょう。
11 #
12 # DCC-JPL Japan/foltia project
13 #
14 #
15
16 use LWP::Simple;
17 use Jcode;
18 use Time::Local;
19 use DBI;
20 use DBD::Pg;
21
22 $path = $0;
23 $path =~ s/getxml2db.pl$//i;
24 if ($pwd  ne "./"){
25 push( @INC, "$path");
26 }
27 require "foltialib.pl";
28
29
30 $processes =  &processfind("getxml2db.pl");
31 if ($processes > 1 ){
32 #print "process  found:$processes\n";
33 &writelog("getxml2db   processes exist. exit:");
34 exit;
35 }else{
36 #print "process NOT found:$processes\n";
37 &writelog("getxml2db  Normal launch.");
38 }
39
40 if ($ARGV[0]  eq "long"){
41         $uri="http://cal.syoboi.jp/cal_chk.php";
42         #$uri="http://syobocal.orz.hm/cal_chk.php";
43         &writelog("getxml2db  use long mode.");
44 }else{
45         $uri="http://cal.syoboi.jp/cal_chk.xml";
46         #$uri="http://syobocal.orz.hm/cal_chk.xml";
47 }
48
49
50         my $data_source = sprintf("dbi:%s:dbname=%s;host=%s;port=%d",
51                 $DBDriv,$DBName,$DBHost,$DBPort);
52
53          $dbh = DBI->connect($data_source,$DBUser,$DBPass) ||die $DBI::error;;
54
55 #$dbh->{AutoCommit} = 0;
56
57 my ($content) = get("$uri");
58 if ($content eq ""){
59 &writelog("getxml2db   no responce from $uri, exit:");
60         exit;#しょぼかるが落ちているなど
61 }
62
63 my (@line) = split(/\n/, $content);
64
65 foreach(@line){
66
67 Jcode::convert(\$_,'euc');
68
69 #<ProgItem PID="21543" TID="528" StTime="20041114213000" EdTime="20041114220000" ChName="AT-X" Count="4" StOffset="0" SubTitle="いやだよ、サヨナラ…" Title="おとぎストーリー 天使のしっぽ" ProgComment=""/>
70 if (/^<ProgItem /){
71 s/<ProgItem //i;
72 s/\"\/>/\" /i;
73 s/\"[\s]/\";\n/gio;
74 s/\'/\\'/gio;
75 s/\"/\'/gio;
76 s/[\w]*=/\$item{$&}=/gio;
77 s/\=}=/}=/gio;
78
79 #$item{PID}='21543';
80 #$item{TID}='528';
81 #$item{StTime}='20041114213000';
82 #$item{EdTime}='20041114220000';
83 #$item{ChName}='AT-X';
84 #$item{Count}='4';
85 #$item{StOffset}='0';
86 #$item{SubTitle}='いやだよ、サヨナラ…';
87 #$item{Title}='おとぎストーリー 天使のしっぽ';
88 #$item{ProgComment}='';
89 eval("$_");
90 Jcode::convert(\$item{Title},'euc');
91
92 $programtitlename = $item{Title};
93 $programtitlename =~ s/\&lt\;/</gi;
94 $programtitlename =~ s/\&gt\;/>/gi;
95 $programtitlename =~ s/\&amp\;/\&/gi;
96 $programtitle = $dbh->quote($programtitlename);
97
98 Jcode::convert(\$item{ChName},'euc');
99 Jcode::convert(\$item{SubTitle},'euc');
100
101 #$programSubTitle = $dbh->quote($item{SubTitle});
102 $programSubTitle = $item{SubTitle};
103 $programSubTitle =~ s/\&lt\;/</gi;
104 $programSubTitle =~ s/\&gt\;/>/gi;
105 $programSubTitle =~ s/\&amp\;/\&/gi;
106 $programSubTitle = $dbh->quote($programSubTitle);
107
108 $offsetmin = $item{StOffset}/60;
109 $edtime = &syobocaldate2foltiadate($item{EdTime});
110 $sttime = &syobocaldate2foltiadate($item{StTime});
111 $length = &calclength($sttime,$edtime);
112 $recstartdate = &calcoffsetdate($sttime ,$offsetmin );
113 $recenddate = &calcoffsetdate($edtime ,$offsetmin );
114
115 $stationid = &getstationid($item{ChName});
116 #サブタイトル追加-------------------------------------------------
117 #番組があるか確認
118 $DBQuery =  "SELECT count(*) FROM foltia_program WHERE tid = '$item{TID}'";
119          $sth = $dbh->prepare($DBQuery);
120         $sth->execute();
121  @titlecount= $sth->fetchrow_array;
122  
123  if ($titlecount[0] == 0){
124 #なければ追加
125
126 #200412012359
127 $nomalstarttime = substr($sttime,8,4);
128 $DBQuery =  "insert into  foltia_program values ($item{TID},$programtitle,'','$nomalstarttime','$length','','','3','1','')";
129 # $sth = $dbh->prepare($DBQuery);
130 # $sth->execute();
131 $oserr = $dbh->do($DBQuery);
132 &writelog("getxml2db  ADD TV Progtam:$item{TID}:$programtitle");
133
134
135 }else{
136 #2006/2/26
137 #あったら、タイトル確認して
138 $DBQuery =  "SELECT title FROM foltia_program WHERE tid = '$item{TID}'";
139          $sth = $dbh->prepare($DBQuery);
140         $sth->execute();
141  @titlearray = $sth->fetchrow_array;
142 #更新などされてたらupdate
143 #print "$titlearray[0] / $programtitle\n";
144  if ($titlearray[0] ne "$programtitlename" ){
145         $DBQuery =  "UPDATE  foltia_program  SET        title = $programtitle where  tid = '$item{TID}' ";
146 #         $sth = $dbh->prepare($DBQuery);
147 #       $sth->execute();
148         $oserr = $dbh->do($DBQuery);
149         &writelog("getxml2db  UPDATE TV Progtam:$item{TID}:$programtitle");
150  }#end if update
151 }# end if TID
152
153
154 #PIDがあるか確認
155 $DBQuery =  "SELECT count(*) FROM foltia_subtitle WHERE tid = '$item{TID}' AND pid =  '$item{PID}' ";
156          $sth = $dbh->prepare($DBQuery);
157         $sth->execute();
158  @subticount= $sth->fetchrow_array;
159  if ($subticount[0]  >= 1){
160         #PIDあったら上書き更新
161 #ここでこんなエラー出てる
162 #       DBD::Pg::st execute failed: ERROR:  invalid input syntax for type bigint: "" at /home/foltia/perl/getxml2db.pl line 147.
163 #UPDATE  foltia_subtitle  SET stationid = '42',countno = '8',subtitle = '京都行きます' ,startdatetime = '200503010035'  ,enddatetime = '200503010050',startoffset  = '0' ,lengthmin = '15' WHERE tid = '550' AND pid =  '26000'
164 if ($item{Count} == ""){
165
166         $DBQuery =  "UPDATE  foltia_subtitle  SET
167         stationid = '$stationid',
168         countno =  null,
169         subtitle = $programSubTitle ,
170         startdatetime = '$recstartdate'  ,
171         enddatetime = '$recenddate',
172         startoffset  = '$offsetmin' ,
173         lengthmin = '$length'
174         WHERE tid = '$item{TID}' AND pid =  '$item{PID}' ";
175
176 }else{
177
178         $DBQuery =  "UPDATE  foltia_subtitle  SET
179         stationid = '$stationid',
180         countno = '$item{Count}',
181         subtitle = $programSubTitle ,
182         startdatetime = '$recstartdate'  ,
183         enddatetime = '$recenddate',
184         startoffset  = '$offsetmin' ,
185         lengthmin = '$length'
186         WHERE tid = '$item{TID}' AND pid =  '$item{PID}' ";
187 }
188 #                $sth = $dbh->prepare($DBQuery);
189 #               $sth->execute();
190         $oserr = $dbh->do($DBQuery);
191
192  }else{
193         #なければ追加
194         
195         #こっちに入る時刻はオフセットされた時刻!
196         #そのままキューに入る形で
197         if ($item{Count} eq ""){
198         $DBQuery = "insert into foltia_subtitle values ( '$item{PID}','$item{TID}','$stationid',null,$programSubTitle,'$recstartdate','$recenddate','$offsetmin' ,'$length')";
199         }else{
200         $DBQuery = "insert into foltia_subtitle values ( '$item{PID}','$item{TID}','$stationid','$item{Count}',$programSubTitle,'$recstartdate','$recenddate','$offsetmin' ,'$length')";
201         }
202 #                $sth = $dbh->prepare($DBQuery);
203 #               $sth->execute();
204         $oserr = $dbh->do($DBQuery);
205
206 }
207
208
209 #print "$DBQuery\n\n\n";
210 #debug 20050803
211 #&writelog("getxml2db $DBQuery");
212
213
214 }#if
215 }#foreach
216
217 #$oserr = $dbh->commit;
218 ##      $dbh->disconnect();
219
220
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。
track feed