source: titan/plugins/imdb/imdb.h @ 13556

Last change on this file since 13556 was 13556, checked in by obi, 12 years ago

[titan] optimize imdb parser

File size: 12.1 KB
Line 
1#ifndef IMDB_H
2#define IMDB_H
3
4extern struct skin* skin;
5/*
6char* string_striptags(char* text, int flag)
7{
8        debug(1000, "in");
9        char* p1 = NULL;
10        char* p2 = NULL;
11
12        p1 = ostrcat(p1, text, 1, 0);
13        p2 = ostrcat(p2, text, 1, 0);
14
15        int skip = 0;
16
17        int count = 0;
18        int len_filename = strlen(p1);
19        int i;
20
21        for(i = 0; (i) < len_filename; i++)
22        {
23                if(p1[i] == '<')
24                {
25                        printf("1111111: < (%d)\n", i);
26                        skip = 1;
27                        continue;
28                }
29                else if(p1[i] == '>')
30                {
31                        printf("2222222: > (%d)\n", i);
32                        skip = 0;
33                        continue;
34                }
35               
36                if(skip == 0)
37                {
38                        printf("save (%d)\n", i);
39                        p2[i] = p1[i]; 
40                }
41        }
42
43        if(flag == 1)
44                free(text),text = NULL;
45        free(p1),p1 = NULL;
46       
47        printf("p2 1: %s\n", p2);
48        p2 = ostrcat(p2, '\0', 1, 0);
49        printf("p2 2: %s\n", p2);
50
51        debug(1000, "out");
52        return p2;
53}
54*/
55char* string_striptags(char* filename)
56{
57        debug(1000, "in");
58        int i, len_filename;
59
60        if(filename == NULL) return 0;
61       
62        len_filename = strlen(filename);
63
64        int skip =0;
65        for(i = 0; (i) < len_filename; i++)
66        {
67                if(filename[i] == '<')
68                {
69                        printf("found < in string\n");
70                        skip = 1;
71                }
72                else if(filename[i] == '>')     
73                {
74                        printf("found > in string\n");
75                        skip = 0;
76                        filename[i] = ' ';
77                }
78                if(skip == 1)
79                        filename[i] = ' ';
80        }       
81
82        debug(1000, "out");
83//      return filename;       
84//      return strstrip(string_strip_whitechars(filename));     
85        return string_strip_whitechars(strstrip(filename));     
86}
87
88char* string_resub(char* str,char* str2, char* filename)
89{
90        debug(1000, "in");
91        int i, len_str, len_filename;
92
93        if(str == NULL || str2 == NULL || filename == NULL) return 0;
94
95        len_str = strlen(str);
96        len_filename = strlen(filename);
97
98        int count = 0;
99        for(i = 0; (i + len_str) < len_filename; i++)
100        {
101                if(strncmp(filename + i, str, len_str) == 0 && count == 0)
102                {
103                        count = i + len_str;
104                        filename[i] = ' ';
105                }
106                else if(count == i && count != 0)
107                {
108                        count = i - len_str;
109                        break;
110                }
111                else
112                        filename[i] = ' ';
113        }
114        len_str = strlen(str2);
115
116        for(i = 0; (i + len_str) < len_filename; i++)
117        {
118                if(strncmp(filename + i, str2, len_str) == 0 && i >= count)
119                {
120                        filename[i] = '\0';
121                        break;
122                }
123        }       
124
125        debug(1000, "out");
126        return filename;
127}
128
129char* screensearch(char* input)
130{
131        char* lastline = NULL;
132        char* tmpstr = NULL;
133        if(input != NULL)
134                lastline = textinput(_("Imdb Suche"), input);
135        else
136                lastline = textinput(_("Imdb Suche"), "");
137
138        tmpstr = ostrcat(lastline, "", 0, 0);
139
140        free(lastline);
141        return tmpstr;
142}
143
144void imdb()
145{
146        int rcret = 0;
147        drawscreen(skin, 0);
148        setfbtransparent(255);
149        status.hangtime = 99999;
150        struct skin* blackscreen = getscreen("blackscreen");
151        drawscreen(blackscreen, 0);
152
153        // main screen
154        struct skin* imdbskin = getscreen("imdb");
155        struct skin* skin_plot = getscreennode(imdbskin, "plot");
156        struct skin* skin_title = getscreennode(imdbskin, "title");
157        struct skin* skin_director = getscreennode(imdbskin, "director");
158        struct skin* skin_writers = getscreennode(imdbskin, "writers");
159        struct skin* skin_genre = getscreennode(imdbskin, "genre");
160        struct skin* skin_tagline = getscreennode(imdbskin, "tagline");
161        struct skin* skin_releasetime = getscreennode(imdbskin, "releasetime");
162        struct skin* skin_bigcover = getscreennode(imdbskin, "bigcover");
163        struct skin* skin_cover = getscreennode(imdbskin, "cover");
164        struct skin* skin_cast = getscreennode(imdbskin, "cast");
165
166//if(ostrcmp("vfdisplay", name) == 0) return 0;
167//tmpstr = ostrcat(tmpstr, "", 1, 0);
168
169        char* input = NULL;
170
171        char* url = NULL;
172        char* apiSearchTV = NULL;
173        char* apiImdbLookup = NULL;
174        char* apiSearch = NULL;
175        char* localfile = NULL;
176        char* fetchurl = NULL;
177        char* search = NULL;
178        char* tmpstr = NULL;
179        char* imdbid = NULL;
180        char* title = NULL;
181        char* plot = NULL;
182        char* director = NULL;
183        char* writers = NULL;
184        char* genre = NULL;
185        char* tagline = NULL;
186        char* releasetime = NULL;
187        char* pagebigcover = NULL;
188        char* bigcover = NULL;
189        char* cover = NULL;
190        char* cast = NULL;
191
192
193        input = getepgakttitle();
194//      input = screensearch("Rambo");
195        printf("input: %s\n", input);
196//      stringreplacechar(input, ' ', '%20');
197        input = string_replace(" ", "%20", input, 1);
198
199
200        printf("input: %s\n", input);
201
202drawscreen(imdbskin, 0);
203
204//      input = ostrcat("", "Days+of+Summer", 0, 0);
205        url = ostrcat(url, "www.imdb.de", 1, 0);
206
207        apiSearchTV = ostrcat("", "/search/title?title=<title>&title_type=tv_series", 0, 0);
208        apiImdbLookup = ostrcat("", "/title/tt", 0, 0);
209        apiSearch = ostrcat("", "/find?s=tt;q=", 0, 0);
210        localfile = ostrcat("", "/tmp/cache.getMovieByTitle.html", 0, 0);
211        printf("get_ip(url): %s\n", get_ip(url));
212        search = ostrcat(apiSearch, input, 0, 0);
213        gethttp(get_ip(url), search, 80, localfile, NULL, NULL);
214//      gethttp(url, search, 80, localfile, NULL, NULL);
215
216
217        tmpstr = readfiletomem(localfile, 1);
218
219        if(string_find("<title>IMDb Title Search</title>",tmpstr))
220        {
221                imdbid = ostrcat(tmpstr, "", 0, 0);
222                string_resub("<a href=\"/title/tt","/",imdbid);
223                strstrip(imdbid);
224                printf("imdbid: %s\n", imdbid);
225        }
226
227        free(tmpstr), tmpstr = NULL;
228////////////////////
229        search = ostrcat(apiImdbLookup, imdbid, 0, 0);
230        search = ostrcat(search, "/", 0, 0);
231
232        localfile = ostrcat("", "/tmp/cache.getMoviesByImdbId.html", 0, 0);
233        printf("search: %s\n", search);
234        printf("url: %s\n", get_ip(url));
235        printf("localfile: %s\n", localfile);
236
237//      gethttp(get_ip(url), search, 80, localfile, NULL, NULL);
238//      gethttp(url, search, 80, localfile, NULL, NULL);
239        unlink(localfile);
240//cache.getMoviesByImdbId.html
241        char* cmd = NULL;
242        cmd = ostrcat(cmd, "wget http://", 1, 0);
243        cmd = ostrcat(cmd, url, 1, 0);
244        cmd = ostrcat(cmd, search, 1, 0);
245        cmd = ostrcat(cmd, " -O ", 1, 0);
246        cmd = ostrcat(cmd, localfile, 1, 0);
247        printf("cmd: %s\n",cmd);
248        system(cmd);
249        free(cmd), cmd = NULL;
250//      tmpstr = string_strip_whitechars(readfiletomem(localfile, 1));
251        tmpstr = readfiletomem(localfile, 1);
252
253
254        title = ostrcat(tmpstr, "", 0, 0);
255        string_resub("<title>","</title>",title);
256        strstrip(title);
257        printf("title: %s\n", title);
258        changetext(skin_title, title);
259
260////////////////////
261        director = ostrcat(tmpstr, "", 0, 0);
262//      string_resub("Director:","</div>",director);   
263        string_resub("Regisseur:","</div>",director);
264        string_striptags(director);
265//      string_strip_whitechars(director);
266        printf("director: %s\n", director);
267//      director = string_skipwhitechars(director, 1);
268//      printf("director2: %s\n", director);
269        changetext(skin_director, director);
270
271
272////////////////////
273
274        writers = ostrcat(tmpstr, "", 0, 0);
275//      string_resub("<h5>Writers","</div>",writers);
276        string_resub("<h5>Drehbuchautor","</div>",writers);
277        printf("writers1: %s\n", writers);
278        string_resub("<div class=\"info-content\">","</div>",writers);
279        printf("writers2: %s\n", writers);
280
281        string_striptags(writers);
282        printf("writers: %s\n", writers);
283        changetext(skin_writers, writers);
284       
285////////////////////
286
287        genre = ostrcat(tmpstr, "", 0, 0);
288        string_resub("<h5>Genre:</h5>","</div>",genre);
289        printf("genre1: %s\n", genre);
290        string_striptags(genre);
291        printf("genre: %s\n", genre);
292        changetext(skin_genre, genre);
293
294////////////////////
295
296/*
297
298        tagline = ostrcat(tmpstr, "", 0, 0);
299        string_resub("<h4 class=\"inline\">Taglines:</h4>","<span class",tagline);
300
301        strstrip(tagline);
302        printf("tagline: %s\n", tagline);
303        changetext(skin_tagline, tagline);
304
305        releasetime = ostrcat(tmpstr, "", 0, 0);
306        string_resub("<h4 class=\"inline\">Release Date:</h4>","</time>",releasetime);
307        count2 = 0;     
308        tmpstr2 = ostrcat(tmpstr2, releasetime, 1, 0);
309        ret2 = strsplit(tmpstr2, "<>", &count2);
310        printf("releasetime1: %s\n", (&ret2[2])->part);
311        strstrip(releasetime);
312        printf("releasetime: %s\n", releasetime);
313        changetext(skin_releasetime, (&ret2[2])->part);
314*/
315
316        releasetime = ostrcat(tmpstr, "", 0, 0);
317        string_resub("<h5>Premierendatum:</h5>","<a class=",releasetime);
318        printf("releasetime1: %s\n", releasetime);
319
320        string_striptags(releasetime);
321        printf("releasetime: %s\n", releasetime);
322        changetext(skin_releasetime, releasetime);
323
324////////////////////
325
326        cast = ostrcat(tmpstr, "", 0, 0);
327        string_resub("<h3>Besetzung</h3>&nbsp;","</td></tr></table>",cast);
328        string_resub("<div class=\"info-content block\"><table class=\"cast\">","</a></td></tr>",cast);
329
330        cast = string_replace("...", "als", cast, 1);
331
332        printf("cast1: %s\n", cast);
333
334        string_striptags(cast);
335        printf("cast: %s\n", cast);
336        changetext(skin_cast, cast);
337       
338////////////////////
339
340
341        pagebigcover = ostrcat(tmpstr, "", 0, 0);
342//      string_resub("href=\"/media/rm","/",pagebigcover);
343        string_resub("/media/rm","/",pagebigcover);
344
345        strstrip(pagebigcover);
346        printf("pagebigcover: %s\n", pagebigcover);
347
348/*
349http://ia.media-imdb.com/images/M/MV5BMjE2MzU3Nzk4M15BMl5BanBnXkFtZTcwODcxNTI5Mw@@._V1_.jpg
350<link rel="image_src" href="
351
352//      char* tmpstr3 = NULL;
353//      tmpstr3 = ostrcat("href=\"/media/rm", pagebigcover, 0, 0);
354//      tmpstr3 = ostrcat(tmpstr3, "/tt", 1, 0);
355//      tmpstr3 = ostrcat(tmpstr3, imdbid, 1, 0);
356//      tmpstr3 = ostrcat(tmpstr3, "\"    ><img src=\"", 1, 0);
357
358        cover = ostrcat(tmpstr, "", 0, 0);
359        string_resub(tmpstr3,"\"",cover);
360
361        printf("tmpstr3: %s\n", tmpstr3);
362        strstrip(cover);
363        printf("cover: %s\n", cover);
364
365char* filename = NULL;
366filename = ostrcat("wget ", cover, 0, 0);
367filename = ostrcat(filename, " -O /tmp/cover.jpg", 1, 0);
368system(filename);       
369changepic(skin_cover, "/tmp/cover.jpg");
370////////////////////
371
372*/
373        char* filename = NULL;
374        search = ostrcat("/media/rm", pagebigcover, 0, 0);
375        search = ostrcat(search, "/tt", 1, 0);
376        search = ostrcat(search, imdbid, 1, 0);
377        search = ostrcat(search, "/", 1, 0);
378
379        localfile = ostrcat("", "/tmp/cache.getpageBigCoverHtml.html", 0, 0);
380        printf("search: %s\n", search);
381        printf("url: %s\n", get_ip(url));
382        printf("localfile: %s\n", localfile);
383
384
385
386        gethttp(get_ip(url), search, 80, localfile, NULL, NULL);
387//      gethttp(url, search, 80, localfile, NULL, NULL);
388        bigcover = readfiletomem(localfile, 1);
389        string_resub("<link rel=\"image_src\" href=\"","\"",bigcover);
390        strstrip(bigcover);
391        printf("bigcover: %s\n", bigcover);
392
393        unlink("/tmp/bigcover.jpg");
394        filename = ostrcat("wget ", bigcover, 0, 0);
395        filename = ostrcat(filename, " -O /tmp/bigcover.jpg", 1, 0);
396        system(filename);
397
398        rcret = servicestop(status.aktservice, 1, 0);
399        if(rcret == 1) return;
400
401changepic(skin_cover, "/tmp/bigcover.jpg");
402////////////////////
403
404//      free(tmpstr), tmpstr = NULL;
405        search = ostrcat(apiImdbLookup, imdbid, 0, 0);
406        search = ostrcat(search, "/plotsummary", 1, 0);
407
408        localfile = ostrcat("", "/tmp/cache.getPlot.html", 0, 0);
409        printf("search: %s\n", search);
410        printf("url: %s\n", get_ip(url));
411        printf("localfile: %s\n", localfile);
412//      gethttp(get_ip(url), search, 80, localfile, NULL, NULL);
413//      gethttp(url, search, 80, localfile, NULL, NULL);
414
415        unlink(localfile);
416        cmd = ostrcat(cmd, "wget http://", 1, 0);
417        cmd = ostrcat(cmd, url, 1, 0);
418        cmd = ostrcat(cmd, search, 1, 0);
419        cmd = ostrcat(cmd, " -O ", 1, 0);
420        cmd = ostrcat(cmd, localfile, 1, 0);
421        printf("cmd: %s\n",cmd);
422        system(cmd);
423        free(cmd), cmd = NULL;
424       
425       
426        plot = readfiletomem(localfile, 1);
427//htmldecode(plot, plot);
428//htmlencode(plot);
429        string_resub("<div id=\"swiki.2.1\">","</div>",plot);
430        printf("plot1: %s\n", plot);
431        string_striptags(plot);
432        printf("plot: %s\n", plot);
433        changetext(skin_plot, plot);   
434       
435//      if(string_find("<p class=\"plotpar\">",plot))
436//      {
437//              string_resub("<p class=\"plotpar\">","<i>",plot);
438//              strstrip(plot);
439//              printf("plot: %s\n", plot);
440//changetext(skin_plot, plot);
441//      }
442
443drawscreen(imdbskin, 0);
444        struct skin* tmp = NULL;
445        while(1)
446        {
447//              addscreenrc(mc_videoplayer_settings, tmp);
448                rcret = waitrc(imdbskin, 0, 0);
449//              tmp = listbox->select;
450       
451                if(rcret == getrcconfigint("rcexit", NULL)) break;
452                if(rcret == getrcconfigint("rcok", NULL))
453                {
454                        break;
455                }
456  }
457
458
459        printf("done:\n");
460
461        free(tmpstr), tmpstr = NULL;
462        free(url), url = NULL;
463        free(apiSearchTV), apiSearchTV = NULL;
464        free(apiImdbLookup), apiImdbLookup = NULL;
465        free(apiSearch), apiSearch = NULL;
466        free(localfile), localfile = NULL;
467        free(fetchurl), fetchurl = NULL;
468        free(search), search = NULL;
469        free(imdbid), imdbid = NULL;
470        free(plot), plot = NULL;
471        free(director), director = NULL;
472        free(writers), writers = NULL;
473        free(genre), genre = NULL;
474        free(tagline), tagline = NULL;
475        free(releasetime), releasetime = NULL;
476        free(pagebigcover), pagebigcover = NULL;
477        free(bigcover), bigcover = NULL;
478        free(cover), cover = NULL;
479        free(cast), cast = NULL;
480
481        delownerrc(imdbskin);
482        clearscreen(imdbskin);
483        drawscreen(skin, 0);
484
485        setosdtransparent(getskinconfigint("osdtransparent", NULL));
486        servicestart(status.lastservice->channel, NULL, NULL, 0);
487       
488//      return apiSearch;
489        return;
490}
491
492#endif
Note: See TracBrowser for help on using the repository browser.