Онлайновый плеер видео файлов с поиском и автоматическим плейлистом.
Используем Uppod плеер не в сети, а на локальном компьютере.
Конструктор онлайн плеера : http://uppod.ru/player/my/
После регистрации на сайте собираем внешний вид плеера и добавляем нужные нам функции ,
а PureBasic используем для создания оболочки и
поиска файлов на YouTube и для создаём плейлиста.
Плейлист отображается внутри плеера.
Поиск поддерживает русские символы.
Есть встроенная функция скачать видео файл.
Сохраняется информация о последнем поиске.
Компилировать в режиме Unicode
В архиве скомпилированный файл, а также исходники PB и html файлы плеера.
Скачать архив с файлами.
Вариант кода для версии PureBasic 4.41 ( нажми на кнопку, чтоб раскрыть код )
; компилировать только в Unicode
Enumeration
#Window_0
#Web
#String_1
#Search
#img
#Website
#Home1
#Home2
#Home3
#Home4
#Home5
#Sticky
EndEnumeration
UsePNGImageDecoder()
Structure Spisok
cod.s
nameA.s
EndStructure
Global NewList Spisok.Spisok() ; Динамически связанный список
Procedure kod_HTML() ; проба не работает
uppod.s ="file://localhost/"+GetPathPart(ProgramFilename())+"uppod.swf" ; полный путь к html файлу
stil.s ="file://localhost/"+GetPathPart(ProgramFilename())+"stil.txt" ; полный путь к html файлу
Playlist.s ="file://localhost/"+GetPathPart(ProgramFilename())+"Playlist_1.txt" ; полный путь к html файлу
Html.s =""
SetGadgetItemText(#Web, #PB_Web_HtmlCode, Html.s)
EndProcedure
Procedure.s Between_2(string.s, L.s, R.s) ; работает в unicode (вырезаем из строки между L и R)
Position = FindString(string, L.s, 1)
string2.s = Right(string, Len(string)+1-Position-Len(L.s))
Position2 = FindString(string2, R.s, 1)
string3.s = Left(string2, Position2-1)
If Position <> 0
ProcedureReturn string3.s
EndIf
EndProcedure
Procedure Search(name.s, home.s) ; поиск видео по YouTube
ClearList(Spisok())
URL.s="http://www.youtube.com/results?search_query="+name.s+home.s
URLDownloadToFile_(0, URL, "Temp.htm",0,0)
If ReadFile(0, "Temp.htm")
While Eof(0) = 0
string.s= ReadString(0)
rez.s= Between_2(string, "video-long-title-", Chr(34)+" href="/project/)
time.s= Between_2(string,"","")
If time.s <>""
tim.s=time.s
EndIf
If rez <>"" And Len(rez) <=11
AddElement(Spisok())
Spisok()\cod.s=rez.s ; код видео файла
Spisok()\nameA.s=Between_2(string, "title="+Chr(34), Chr(34)+" rel=") ; название видео файла
EndIf
Wend
CloseFile(0)
DeleteFile("Temp.htm")
EndIf
EndProcedure
Procedure Playlist()
CreateFile(0, "Playlist_1.txt")
WriteStringN(0, "{"+Chr(34)+"playlist"+Chr(34)+":[" )
ForEach Spisok()
If Spisok()
code.s=Spisok()\cod.s
name.s=Spisok()\nameA.s
WriteStringN(0,"{"+Chr(34)+"comment"+Chr(34)+": "+Chr(34)+""+name.s+""+Chr(34)+", "+Chr(34)+"file"+Chr(34)+":"+Chr(34)+"http://www.youtube.com/watch?v="+code.s+""+Chr(34)+" , "+Chr(34)+"poster"+Chr(34)+":"+Chr(34)+"http://i4.ytimg.com/vi/"+code.s+"/default.jpg"+Chr(34)+"},") ; default.jpg
EndIf
Next
WriteStringN(0,"{"+Chr(34)+"comment"+Chr(34)+": "+Chr(34)+"Zemfira"+Chr(34)+", "+Chr(34)+"file"+Chr(34)+":"+Chr(34)+"http://www.youtube.com/watch?v=JueAA8fT18M"+Chr(34)+" , "+Chr(34)+"poster"+Chr(34)+":"+Chr(34)+"http://i4.ytimg.com/vi/JueAA8fT18M/default.jpg"+Chr(34)+"}")
WriteStringN(0, "]}" )
CloseFile(0)
SetGadgetState(#Web,#PB_Web_Refresh)
EndProcedure
Procedure.s Transliterate(s.s) ; транлитерация в unicode
s=UCase(s)
i.l; integer;
Char.s; string;
t.s=""
For i=1 To Len(s)
Char=Mid(s, i, 1) ; Читаем очередную букву
rez= Asc(Char)
Select rez ; нет Ё , Ъ
Case 1040: T=T+"%D0%90"; А
Case 1041: T=T+"%D0%91"; Б
Case 1042: T=T+"%D0%92"; В
Case 1043: T=T+"%D0%93"; Г
Case 1044: T=T+"%D0%94"; Д
Case 1045: T=T+"%D0%95"; Е
Case 1025: T=T+"%D0%81"; Ё
Case 1046: T=T+"%D0%96"; Ж
Case 1047: T=T+"%D0%97"; З
Case 1048: T=T+"%D0%98"; И
Case 1049: T=T+"%D0%99"; Й
Case 1050: T=T+"%D0%9A"; К
Case 1051: T=T+"%D0%9B"; Л
Case 1052: T=T+"%D0%9C"; М
Case 1053: T=T+"%D0%9D"; Н
Case 1054: T=T+"%D0%9E"; О
Case 1055: T=T+"%D0%9F"; П
Case 1056: T=T+"%D0%A0"; Р
Case 1057: T=T+"%D0%A1"; С
Case 1058: T=T+"%D0%A2"; Т
Case 1059: T=T+"%D0%A3"; У
Case 1060: T=T+"%D0%A4"; Ф
Case 1061: T=T+"%D0%A5"; Х
Case 1062: T=T+"%D0%A6"; Ц
Case 1063: T=T+"%D0%A7"; Ч
Case 1064: T=T+"%D0%A8"; Ш
Case 1065: T=T+"%D0%A9"; Щ
Case 1066: T=T+"%D0%AA"; Ъ
Case 1067: T=T+"%D0%AB"; Ы
Case 1068: T=T+"%D0%AC"; Ь
Case 1069: T=T+"%D0%AD"; Э
Case 1070: T=T+"%D0%AE"; Ю
Case 1071: T=T+"%D0%AF"; Я
Default
t=t+Char;
EndSelect;
Next
ProcedureReturn t
EndProcedure
Procedure Animate_Winodw(State)
If State=1 ; Развернуть окно
For i=484 To 508 Step 2
ResizeWindow(#Window_0,#PB_Ignore,#PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
ResizeGadget(#img,#PB_Ignore,503,#PB_Ignore,#PB_Ignore)
Else ; Свернуть окно
For i=508 To 484 Step -2
ResizeWindow(#Window_0,#PB_Ignore,#PB_Ignore,#PB_Ignore,i)
For x=1 To 10
WindowEvent()
Next x
Delay(8)
Next i
ResizeGadget(#img,#PB_Ignore,480,#PB_Ignore,#PB_Ignore)
EndIf
EndProcedure
CatchImage(#img, ?Im1, ?Im1End -?Im1 )
patch.s="file://localhost/"+GetPathPart(ProgramFilename())+"test.htm" ; полный путь к html файлу
OpenWindow (#Window_0,0,0,640,485,"Uppod player", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
SetWindowColor(#Window_0,RGB(0, 0, 0))
ImageGadget(#img,320,480,32,5,ImageID(#img))
;---------------------------------------------------------------------------------
StringGadget(#String_1,13,487,150,15,"Zemfira",#PB_String_BorderLess)
SetGadgetColor(#String_1, #PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(#String_1, #PB_Gadget_FrontColor , RGB(113, 113, 113))
HyperLinkGadget(#Search,165,487, 50, 15, "Search",RGB(218, 218, 218))
SetGadgetColor(#Search, #PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(#Search, #PB_Gadget_FrontColor , RGB(46, 46, 46))
HyperLinkGadget(#Sticky,230,487, 55, 15, "Sticky YES",RGB(218, 218, 218)) ; окно сверху
SetGadgetColor(#Sticky, #PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(#Sticky, #PB_Gadget_FrontColor , RGB(46, 46, 46))
HyperLinkGadget(#Website,490,489, 150, 17, "http://uppod.ru/player/intro/",RGB(218, 218, 218))
SetGadgetColor(#Website, #PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(#Website, #PB_Gadget_FrontColor , RGB(46, 46, 46))
;---------------------------------------------------------------------------------
HyperLinkGadget(#Home1,370,487, 10, 12, "1",RGB(218, 218, 218))
SetGadgetColor(#Home1, #PB_Gadget_BackColor, RGB(0, 0, 0))
SetGadgetColor(#Home1, #PB_Gadget_FrontColor, RGB(46, 46, 46))
HyperLinkGadget(#Home2,390,487, 10, 12, "2",RGB(218, 218, 218))
SetGadgetColor(#Home2, #PB_Gadget_BackColor, RGB(0, 0, 0))
SetGadgetColor(#Home2, #PB_Gadget_FrontColor, RGB(46, 46, 46))
HyperLinkGadget(#Home3,410,487, 10, 12, "3",RGB(218, 218, 218))
SetGadgetColor(#Home3, #PB_Gadget_BackColor, RGB(0, 0, 0))
SetGadgetColor(#Home3, #PB_Gadget_FrontColor, RGB(46, 46, 46))
HyperLinkGadget(#Home4,430,487, 10, 12, "4",RGB(218, 218, 218))
SetGadgetColor(#Home4, #PB_Gadget_BackColor, RGB(0, 0, 0))
SetGadgetColor(#Home4, #PB_Gadget_FrontColor, RGB(46, 46, 46))
HyperLinkGadget(#Home5,450,487, 10, 12, "5",RGB(218, 218, 218))
SetGadgetColor(#Home5, #PB_Gadget_BackColor, RGB(0, 0, 0))
SetGadgetColor(#Home5, #PB_Gadget_FrontColor, RGB(46, 46, 46))
;---------------------------------------------------------------------------------
;{ находим имя последнего поиска
If ReadFile(3, "name.txt")
string.s= ReadString(3)
SetGadgetText(#String_1,string.s)
CloseFile(3)
EndIf
;}
WebGadget(#Web, 0, 0, 920, 480, patch.s)
StickyWindow(#Window_0, 1) ; окно сверху
;kod_HTML()
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Sticky
Stick = Stick ! 1
If Stick=1
StickyWindow(#Window_0, 0)
SetGadgetText(#Sticky, "Sticky NO")
Else
StickyWindow(#Window_0, 1)
SetGadgetText(#Sticky, "Sticky YES")
EndIf
Case #Website
RunProgram("http://uppod.ru/player/intro/")
Case #Search
name.s= GetGadgetText(#String_1)
name.s= Transliterate(name.s)
Search(name.s,home.s)
Playlist()
Case #img ; раскрыть
If EventType()=#PB_EventType_LeftClick ; раскрыть по левому клику
klic=klic ! 1
If klic
Animate_Winodw(1)
Else
Animate_Winodw(0)
EndIf
EndIf
Case #Home1,#Home2,#Home3,#Home4,#Home5 ; поиск по страницам
home.s= GetGadgetText(Gadget)
SetWindowTitle(#Window_0,"Uppod player Home "+home)
name.s= GetGadgetText(#String_1)
name.s= Transliterate(name.s)
home.s="&aq=suggested_categories=10&page="+home.s
Search(name.s,home.s)
Playlist()
EndSelect
EndSelect
If Event = #PB_Event_CloseWindow
OpenFile(3, "name.txt") ; записываем последний поиск
name.s = GetGadgetText(#String_1)
WriteStringN(3,name.s)
CloseFile(3)
Break
EndIf
ForEver
DataSection
Im1:
IncludeBinary "resaze_1.png"
Im1End:
EndDataSection