source: titan/plugins/tithek/myvideo.h @ 39049

Last change on this file since 39049 was 39049, checked in by obi, 6 years ago

fix myvideo crash

File size: 13.4 KB
Line 
1#ifndef MYVIDEO_H
2#define MYVIDEO_H
3
4// flag 1 = getstreamurl
5//http://www.myvideo.de/dynamic/get_player_video_xml.php?domain=www.myvideo.de&flash_playertype=D&ds=1&autorun=yes&ID=1770991
6
7//http://www.myvideo.de/dynamic/get_player_video_xml.php?domain=www.myvideo.de&flash_playertype=D&ds=1&autorun=yes&ID=9693945
8
9char* myvideo_hoster(char* link)
10{
11        debug(99, "link: %s", link);
12        char* streamurl = NULL;
13
14        streamurl = hoster(link);
15        debug(99, "streamurl1: %s", streamurl);
16
17        streamurl = string_replace_all("amp;", "", streamurl, 1);
18        debug(99, "streamurl2: %s", streamurl);
19
20        return streamurl;
21}
22
23char* myvideo(char* link)
24{
25        debug(99, "link: %s", link);
26        int debuglevel = getconfigint("debuglevel", NULL);
27        char* ip = NULL, *pos = NULL, *path = NULL, *tmplink = NULL, *pageUrl = NULL, *playpath = NULL, *video_id = NULL, *source = NULL, *streamurl = NULL, *tmpstr_uni = NULL, *b64 = NULL, *key = NULL, *newurl = NULL, *tmpstr = NULL, *tmppath = NULL, *error = NULL;
28        int flag = 1;
29
30/*
31        if(flag == 1)
32        {
33                int count = 0;
34                struct splitstr* ret1 = NULL;
35                ret1 = strsplit(input, ";", &count);
36                if(ret1 != NULL && count >= 4)
37                {
38                        link = ostrcat(ret1[0].part, NULL, 0, 0);
39                        pageUrl = ostrcat(pageUrl, ret1[1].part, 1, 0);
40                        playpath = ostrcat(playpath, ret1[2].part, 1, 0);
41                        video_id = ostrcat(video_id, ret1[3].part, 1, 0);                                                                       
42                }
43                free(ret1), ret1 = NULL;
44        }       
45*/
46        stringreplacechar(link, ';', '\0');
47
48        if(ostrstr(link, "/watch/") != NULL)
49        {
50//              video_id = oregex(".*/watch/.*(.*)/.*", link);
51                video_id = string_resub("/watch/", "/", link, 0);
52                tmplink = ostrcat("http://www.myvideo.de/dynamic/get_player_video_xml.php?domain=www.myvideo.de&flash_playertype=D&ds=1&autorun=yes&ID=", video_id, 0, 0);
53                tmplink = ostrcat(tmplink, "&_countlimit=4;", 1, 0);
54                free(video_id), video_id = NULL;
55        }
56        else
57                tmplink = ostrcat(link, NULL, 0, 0);
58
59        ip = string_replace("http://", "", tmplink, 0);
60
61        if(ip != NULL)
62                pos = strchr(ip, '/');
63        if(pos != NULL)
64        {
65                pos[0] = '\0';
66                path = pos + 1;
67        }
68
69        video_id = string_resub("&ID=", "&", tmplink, 0);
70
71        tmppath = ostrcat("watch/", video_id , 0, 0);
72        tmppath = ostrcat(tmppath, "/" , 1, 0);
73        tmpstr = gethttp(ip, tmppath, 80, NULL, NULL, 10000, NULL, 0);
74        error = string_resub("<div class='lContent lContNoBorder error sBold sCenter'>", "</div>", tmpstr, 0);
75
76        unlink("/tmp/myvideo_tmpstr");
77        unlink("/tmp/myvideo_tmpstr_uni");
78        unlink("/tmp/myvideo_tmpstr_error");
79
80        titheklog(debuglevel, "/var/usr/local/share/titan/plugins/tithek/myvideo_tmpstr", NULL, NULL, NULL, tmpstr);
81
82        titheklog(debuglevel, "/tmp/myvideo_tmpstr_error", NULL, NULL, NULL, tmpstr);
83                               
84        if(ostrstr(error, "<div class='error sBold' id='error_screen_body'>") == NULL && error != NULL)
85        {
86                textbox(_("Message"), _(error) , _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 1200, 200, 0, 0);
87                debug(99, "error msg: %s", error);
88        }       
89       
90        debug(99, "error link: http://%s/%s", ip, tmppath);
91        free(tmpstr), tmpstr = NULL;
92        free(tmppath), tmppath = NULL;
93        free(error), error = NULL;
94       
95// not working tmpstr hat zusatzdaten im string
96        tmpstr = gethttp(ip, path, 80, NULL, NULL, 10000, NULL, 0);
97
98        debug(99, "link: http://%s/%s", ip, path);
99        titheklog(debuglevel, "/var/usr/local/share/titan/plugins/tithek/myvideo_tmpstr2", NULL, NULL, NULL, tmpstr);
100
101        titheklog(debuglevel, "/tmp/myvideo_tmpstr", NULL, NULL, NULL, tmpstr);
102
103/*
104// work start
105        unlink("/tmp/myvideo_tmp");
106        char* cmd = NULL;
107        cmd = ostrcat("wget \"", input, 0, 0);
108        cmd = ostrcat(cmd, "\" -O /tmp/myvideo_tmp", 1, 0);
109        system(cmd);
110        free(cmd), cmd = NULL;
111        tmpstr = readfiletomem("/tmp/myvideo_tmp", 0);
112// work end
113*/
114        if(flag == 1)
115        {
116                int count = 0;
117                struct splitstr* ret1 = NULL;
118                ret1 = strsplit(tmpstr, "=", &count);
119                int hlen = 0;
120
121                if(ret1 != NULL && count >= 2)
122                {
123//                      debug(99, "ret1[1].part=%s", (ret1[1]).part);
124                        hlen = strlen(ret1[1].part);
125                        tmpstr_uni = unhexlify(ret1[1].part);
126                }
127                free(ret1), ret1 = NULL;
128
129                if(video_id != NULL)
130                        b64 = ostrcat("c8407a08b3c71ea418ec9dc662f2a56e40cbd6d5a114aa50fb1e1079e17f2b83", MDString(video_id), 0, 1);
131                debug(99, "b64=%s", b64);
132
133                if(b64 != NULL)
134                        key = MDString(b64);
135                int slen = 0;
136                int klen = 0;
137                if(tmpstr_uni != NULL) slen = strlen(tmpstr_uni);
138                if(key != NULL) klen = strlen(key);
139               
140                if(tmpstr_uni != NULL)
141                {
142                        debug(99, "hexlen=%d", hlen);
143                        hlen /= 2;
144                        debug(99, "binlen=%d", hlen);
145                        debug(99, "keylen=%d", klen);
146                        debug(99, "b64=%s", b64);
147                        debug(99, "key=%s", key);
148
149                        rc4(tmpstr_uni, hlen, key, klen);
150
151                        debug(99, "encrypted=%s", tmpstr_uni);
152                        debug(99, "pageUrl: %s\n", pageUrl);
153                        debug(99, "playpath: %s\n", playpath);
154                        debug(99, "video_id: %s\n", video_id);
155                        //printf("tmpstr_uni: %s\n",tmpstr_uni);
156
157                        htmldecode(tmpstr_uni, tmpstr_uni);
158
159                        titheklog(debuglevel, "/tmp/myvideo_tmpstr_uni", NULL, NULL, NULL, tmpstr_uni);
160
161                        if(ostrstr(tmpstr_uni, "connectionurl='rtmp"))
162                        {
163                                printf("found rtmpe:// stream\n");
164                                source = string_resub("source='", ".flv'", tmpstr_uni, 0);
165
166                                newurl = string_resub("connectionurl='", "'", tmpstr_uni, 0);
167
168/*
169                                if(ostrstr(newurl, "myvideo2flash"))
170                                {
171                                        printf("change to rtmpt:// stream\n");
172                                        newurl = string_replace("rtmpe://", "rtmpt://", newurl, 1);
173                                }
174*/
175                                newurl = string_replace("rtmpe://", "rtmp://", newurl, 1);
176       
177                                streamurl = ostrcat(newurl, NULL, 0, 0);
178                                streamurl = ostrcat(streamurl, " ", 1, 0);
179                                streamurl = ostrcat(streamurl, "tcUrl=", 1, 0);
180                                streamurl = ostrcat(streamurl, newurl, 1, 0);
181                                streamurl = ostrcat(streamurl, " swfVfy=http://is4.myvideo.de/de/player/mingR11q/ming.swf ", 1, 0);
182                                streamurl = ostrcat(streamurl, pageUrl, 1, 0);
183                                streamurl = ostrcat(streamurl, " ", 1, 0);
184                                streamurl = ostrcat(streamurl, "playpath=flv:", 1, 0);
185                                streamurl = ostrcat(streamurl, source, 1, 0);           
186                        }
187                        else
188                        {               
189                                printf("rtmpe not found, change to *.flv stream\n");
190                                source = string_resub("source='", "'", tmpstr_uni, 0);
191       
192                                newurl = string_resub("path='", "'", tmpstr_uni, 0);
193       
194                                streamurl = ostrcat(newurl, source, 0, 0);
195                        }
196                }
197        }
198
199        free(key), key = NULL;         
200        free(b64), b64 = NULL;
201        free(tmpstr_uni), tmpstr_uni = NULL;           
202        free(tmplink), tmplink = NULL;
203        free(source), source = NULL;
204        free(tmpstr), tmpstr = NULL;
205        free(pageUrl), pageUrl = NULL;         
206        free(playpath), playpath = NULL;
207        free(ip), ip = NULL;
208        free(video_id), video_id = NULL;
209        free(newurl), newurl = NULL;
210// segfault munmap_chunk(): invalid pointer
211//      free(pos), pos = NULL;
212//      free(path), path = NULL;
213
214//      debug(99, "streamurl2: %s", streamurl);
215        return streamurl;
216}
217
218int myvideo_search(struct skin* grid, struct skin* listbox, struct skin* countlabel, struct skin* load, char* link, char* title, char* searchstr, int flag)
219{
220        int ret = 1;
221        int debuglevel = getconfigint("debuglevel", NULL);
222
223        if(listbox == NULL || listbox->select == NULL || listbox->select->handle == NULL)
224                return ret;
225
226        char* search = NULL;
227
228        if(flag == 0)
229        {
230                if(searchstr == NULL)
231                        search = textinputhist(_("Search"), " ", "searchhist");
232                else
233                        search = textinputhist(_("Search"), searchstr, "searchhist");
234        }
235
236        if(search != NULL || flag > 0)
237        {
238                drawscreen(load, 0, 0);
239                search = stringreplacechar(search, ' ', '+');
240                char* id = NULL;
241                char* line = NULL;
242                char* pic = NULL;
243                char* title = NULL;
244                char* menu = NULL;
245                char* path = NULL;
246                char* ip = ostrcat("www.myvideo.de", NULL, 0, 0);
247
248                if(flag == 0)
249                        path = ostrcat("Videos_A-Z?searchWord=", search, 0, 0);
250                else
251                        path = ostrcat("Top_100/Top_100_Single_Charts", NULL, 0, 0);
252               
253                char* tmpstr = NULL;
254                char* tmpstr1 = NULL;
255                tmpstr = gethttp(ip, path, 80, NULL, NULL, 10000, NULL, 0);
256                titheklog(debuglevel, "/var/usr/local/share/titan/plugins/tithek/myvideo1_search_tmpstr", NULL, NULL, NULL, tmpstr);
257
258                if(flag == 0)
259                {
260                        tmpstr = string_replace_all("<", "\n", tmpstr, 1);
261                        tmpstr = string_replace_all(">", "\n", tmpstr, 1);
262                        titheklog(debuglevel, "/var/usr/local/share/titan/plugins/tithek/myvideo2_search_tmpstr_replace", NULL, NULL, NULL, tmpstr);
263                }
264                else
265                {
266                        tmpstr1 = string_resub("MV.contentLists.chartlist = {", "</script>", tmpstr, 0);       
267                        titheklog(debuglevel, "/var/usr/local/share/titan/plugins/tithek/myvideo2_search_tmpstr1_resub", NULL, NULL, NULL, tmpstr1);
268                        free(tmpstr), tmpstr = NULL;
269                        tmpstr = ostrcat(tmpstr1, NULL, 0, 0);
270                        free(tmpstr1), tmpstr1 = NULL;                 
271                }
272               
273                int count = 0;
274                int incount = 0;
275                int i = 0;
276                struct splitstr* ret1 = NULL;
277                ret1 = strsplit(tmpstr, "\n", &count);
278
279                if(ret1 != NULL)
280                {
281                        int max = count;
282                        for(i = 0; i < max; i++)
283                        {
284                                debug(99, "1111ret1[i].part=%s", ret1[i].part);                                 
285
286                                if(ostrstr(ret1[i].part, "img id='i") != NULL)
287                                {
288                                        debug(99, "---------------------------");
289                                        debug(99, "ret1[i].part: %s", ret1[i].part);
290                                        int rcret = waitrc(NULL, 10, 0);
291                                        if(rcret == getrcconfigint("rcexit", NULL)) break;
292                                        pic = oregex(".*longdesc='(.*)' class='vThumb.*", ret1[i].part);
293                                        id = oregex(".*img id='i(.*)' onload=.*", ret1[i].part);
294                                        title = oregex(".*alt='(.*)' onmouseover=.*", ret1[i].part);
295                                        debug(99, "title: %s", title);
296                                        debug(99, "pic: %s", pic);
297                                        debug(99, "id: %s", id);
298                                        debug(99, "---------------------------");
299                                }
300                                else if(ostrstr(ret1[i].part, "{\"id\":") != NULL)
301                                {
302                                        debug(99, "---------------------------");
303                                        debug(99, "ret1[i].part: %s", ret1[i].part);
304                                        int rcret = waitrc(NULL, 10, 0);
305                                        if(rcret == getrcconfigint("rcexit", NULL)) break;
306//                                      pic = oregex(".*{\"id\":(.*),\".*", ret1[i].part);
307//                                      id = oregex(".*{\"id\":(.*),\".*", ret1[i].part);
308//                                      title = oregex(".*alt='(.*)' onmouseover=.*", ret1[i].part);
309
310                                        id = string_resub("{\"id\":", ",\"", ret1[i].part, 0); 
311                                        pic = string_resub("\"thumbnail\":\"", "\",", ret1[i].part, 0);
312                                        title = string_resub("\"title\":\"", "\",", ret1[i].part, 0);   
313                                        pic = string_replace_all("\\", "", pic, 1);
314                       
315                                        debug(99, "title: %s", title);
316                                        debug(99, "pic: %s", pic);
317                                        debug(99, "id: %s", id);
318                                        debug(99, "---------------------------");
319                                }
320                                if(id != NULL)
321                                {
322                                        incount += 1;
323                                        line = ostrcat(line, title, 1, 0);
324//                                              line = ostrcat(line, "#http://www.myvideo.de/dynamic/get_player_video_xml.php?flash_playertype=SER&ID=", 1, 0);
325// de fix
326                                        line = ostrcat(line, "#http://www.myvideo.de/dynamic/get_player_video_xml.php?domain=www.myvideo.de&flash_playertype=D&ds=1&autorun=yes&ID=", 1, 0);
327                                        line = ostrcat(line, id, 1, 0);
328//                                              line = ostrcat(line, "&_countlimit=4&autorun=yes;pageUrl=http://www.myvideo.de/watch/", 1, 0);                                                                         
329// de fix
330                                        line = ostrcat(line, "&_countlimit=4;pageUrl=http://www.myvideo.de/watch/", 1, 0);                                                                             
331                                        line = ostrcat(line, id, 1, 0);
332                                        line = ostrcat(line, "/;playpath=flv:movie24/a0/", 1, 0);
333                                        line = ostrcat(line, id, 1, 0);
334                                        line = ostrcat(line, ";", 1, 0);
335                                        line = ostrcat(line, id, 1, 0);                                                                                                                                                         
336                                        line = ostrcat(line, "#", 1, 0);
337                                        line = ostrcat(line, pic, 1, 0);
338                                        line = ostrcat(line, "#myvideo_search_", 1, 0);
339                                        line = ostrcat(line, oitoa(incount + time(NULL)), 1, 0);
340                                        line = ostrcat(line, ".jpg#MyVideo - Search#12\n", 1, 0);
341                                        free(ip), ip = NULL;
342                                        free(path), path = NULL;
343                                        free(title), title = NULL;
344                                }
345                                free(title), title = NULL;
346                                free(pic), pic = NULL;
347                                free(id), id = NULL;
348                        }
349                        free(ret1), ret1 = NULL;
350
351                        if(line != NULL)
352                        {
353                                menu = ostrcat("/tmp/tithek/myvideo.search.list", NULL, 0, 0);
354                                writesys(menu, line, 0);
355                                struct tithek* tnode = (struct tithek*)listbox->select->handle;
356                                createtithek(tnode, tnode->title, menu, tnode->pic, tnode->localname, tnode->menutitle, tnode->flag);
357                                ret = 0;
358                        }
359                }
360                free(tmpstr), tmpstr = NULL;
361        }
362        free(search), search = NULL;
363        return ret;
364}
365
366int myvideo_search_local(struct skin* grid, struct skin* listbox, struct skin* countlabel, struct skin* load, char* link, char* title, char* searchstr, int flag)
367{
368        char* tmpstr = NULL, *tmpstr1 = NULL, *line = NULL, *menu = NULL, *search = NULL;
369        int ret = 1, count = 0, i = 0;
370
371        if(listbox == NULL || listbox->select == NULL || listbox->select->handle == NULL)
372                return ret;
373
374        if(searchstr == NULL)
375                search = textinputhist(_("Search"), " ", "searchhist");
376        else
377                search = textinputhist(_("Search"), searchstr, "searchhist");
378
379        if(search != NULL)
380        {
381                drawscreen(load, 0, 0);
382
383                strstrip(search);
384                string_tolower(search);
385
386                tmpstr = gethttp("atemio.dyndns.tv", "/mediathek/myvideo/streams/myvideo.all-sorted.list", 80, NULL, HTTPAUTH, 5000, NULL, 0);
387
388                struct splitstr* ret1 = NULL;
389                ret1 = strsplit(tmpstr, "\n", &count);
390
391                if(ret1 != NULL)
392                {
393                        int max = count;
394                        for(i = 0; i < max; i++)
395                        {
396                       
397                                tmpstr1 = ostrcat(ret1[i].part, NULL, 0, 0);
398                                tmpstr1 = stringreplacecharonce(tmpstr1, '#', '\0');
399                                string_tolower(tmpstr1);
400
401                                if(ostrstr(tmpstr1, search) != NULL)
402                                {
403                                        printf("found: %s\n", ret1[i].part);
404                                        int rcret = waitrc(NULL, 10, 0);
405                                        if(rcret == getrcconfigint("rcexit", NULL)) break;
406
407                                        line = ostrcat(line, ret1[i].part, 1, 0);
408                                        line = ostrcat(line, "\n", 0, 0);
409                                }
410                                free(tmpstr1), tmpstr1 = NULL;                         
411                        }
412                        free(ret1), ret1 = NULL;
413
414                        if(line != NULL)
415                        {
416                                line = string_replace_all("http://atemio.dyndns.tv/", "http://imageshack.us/md/up/grd/", line, 1);
417                                menu = ostrcat("/tmp/tithek/myvideo.search.list", NULL, 0, 0);
418                                writesys(menu, line, 0);
419                                struct tithek* tnode = (struct tithek*)listbox->select->handle;
420                                createtithek(tnode, tnode->title, menu, tnode->pic, tnode->localname, tnode->menutitle, tnode->flag);
421                                ret = 0;
422                        }
423                }
424                free(tmpstr), tmpstr = NULL;
425        }
426        free(search), search = NULL;
427        return ret;
428}
429
430#endif
Note: See TracBrowser for help on using the repository browser.