Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
aefd2599
Commit
aefd2599
authored
Jun 03, 2010
by
Jean-Philippe André
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lua: new script Allocine (France)
This extension is in French only. A german version may appear soon.
parent
ac07c982
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
300 additions
and
0 deletions
+300
-0
share/lua/extensions/allocine-fr.lua
share/lua/extensions/allocine-fr.lua
+300
-0
No files found.
share/lua/extensions/allocine-fr.lua
0 → 100644
View file @
aefd2599
--[[
Allocine Extension for VLC media player 1.1
French website only
Copyright © 2010 VideoLAN and AUTHORS
Authors: Jean-Philippe André (jpeg@videolan.org)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
--]]
-- Lua modules
require
"simplexml"
-- Global variables
dlg
=
nil
-- Dialog
title
=
nil
-- Text input widget
message
=
nil
-- Label
list
=
nil
-- List widget
okay
=
nil
-- Okay button
html
=
nil
-- HTML box
films
=
{}
-- Extension description
function
descriptor
()
return
{
title
=
"Allociné (France)"
;
version
=
"1.0"
;
author
=
"Jean-Philippe André"
;
url
=
'http://www.allocine.fr/'
;
shortdesc
=
"Allocine.com"
;
description
=
"<center><b>ALLOCINE.COM</b></center>"
..
"Récupère des informations sur le média en cours "
..
"de lecture depuis Allocine.fr, telles que :<br />"
..
"- Casting,<br />- Résumé,<br />- Note des utilisateurs,"
..
"<br />- Lien direct vers la fiche du film sur "
..
"<a href=\"
http
:
//
www
.
allocine
.
fr
\
">allocine.fr</a>."
;
capabilities
=
{
"input-listener"
,
"meta-listener"
}
}
end
-- Activation hook
function
activate
()
vlc
.
msg
.
dbg
(
"[ALLOCINE.COM] Welcome on Allocine.fr"
)
create_dialog
()
end
-- Deactivation hook
function
deactivate
()
vlc
.
msg
.
dbg
(
"[ALLOCINE.COM] Bye bye!"
)
end
-- Dialog close hook
function
close
()
-- Deactivate this extension
vlc
.
deactivate
()
end
-- Input change hook
function
input_changed
()
title
:
set_text
(
get_title
())
end
-- Meta change hook
function
meta_changed
()
title
:
set_text
(
get_title
())
end
-- Create the dialog
function
create_dialog
()
dlg
=
vlc
.
dialog
(
"ALLOCINE.COM"
)
dlg
:
add_label
(
"<b>Titre du film:</b>"
,
1
,
1
,
1
,
1
)
title
=
dlg
:
add_text_input
(
get_title
(),
2
,
1
,
1
,
1
)
dlg
:
add_button
(
"Rechercher"
,
click_chercher
,
3
,
1
,
1
,
1
)
end
-- Get clean title from filename
function
get_title
(
str
)
local
item
=
vlc
.
item
or
vlc
.
input
.
item
()
if
not
item
then
return
""
end
local
metas
=
item
:
metas
()
if
metas
[
"title"
]
then
return
metas
[
"title"
]
else
local
filename
=
string.gsub
(
item
:
name
(),
"^(.+)%.%w+$"
,
"%1"
)
return
trim
(
filename
or
item
:
name
())
end
end
-- Remove leading and trailing spaces
function
trim
(
str
)
if
not
str
then
return
""
end
return
string.gsub
(
str
,
"^%s*(.-)%s*$"
,
"%1"
)
end
-- Lookup for this movie title
function
click_chercher
()
-- Get title
local
name
=
title
:
get_text
()
if
not
name
or
name
==
""
then
vlc
.
msg
.
dbg
(
"[ALLOCINE.COM] No title"
)
return
end
-- Update dialog
if
list
then
dlg
:
del_widget
(
list
)
list
=
nil
end
-- Transform spaces and dots into +
name
=
string.gsub
(
string.gsub
(
name
,
"[%p%s%c]"
,
"+"
),
"%++"
,
"+"
)
-- Build URL
local
url
=
"http://www.allocine.fr/recherche/?q="
..
name
-- Please wait...
local
message_text
=
"Recherche <a href=\"" .. url .. "
\
">"
..
string.gsub
(
name
,
"%+"
,
" "
)
..
"</a> sur Allociné..."
if
not
message
then
message
=
dlg
:
add_label
(
message_text
,
1
,
2
,
3
,
1
)
else
message
:
set_text
(
message_text
)
end
if
list
then
dlg
:
del_widget
(
list
)
end
if
okay
then
dlg
:
del_widget
(
okay
)
end
if
html
then
dlg
:
del_widget
(
html
)
end
list
=
nil
okay
=
nil
html
=
nil
dlg
:
update
()
-- Open URL
local
s
,
msg
=
vlc
.
stream
(
url
)
if
not
s
then
vlc
.
msg
.
warn
(
"[ALLOCINE.COM] "
..
msg
)
end
-- Fetch HTML data (max 65 kb)
local
data
=
s
:
read
(
65535
)
-- Clean data
data
=
string.gsub
(
data
,
"<b>"
,
""
)
data
=
string.gsub
(
data
,
"</b>"
,
""
)
data
=
string.gsub
(
data
,
"%s+"
,
" "
)
-- Data storage
films
=
{}
-- Find categories
for
category
in
string.gmatch
(
data
,
"<[hH]2>%s*([^<]+)%s*</[hH]2>"
)
do
local
category
=
trim
(
category
)
-- Split substring corresponding to this table
local
_
,
first
=
string.find
(
data
,
"<[hH]2>%s*"
..
category
..
"%s*</[hH]2>"
)
first
,
_
=
string.find
(
data
,
"<table"
,
first
)
local
_
,
last
=
string.find
(
data
,
"</table>"
,
first
)
-- Find movies and TV shows
if
category
==
"Films"
or
category
==
"Séries TV"
then
-- Read <table> tag as xml
local
substring
=
string.sub
(
data
,
first
,
last
or
-
1
)
print
(
"
\n
"
)
print
(
substring
)
print
(
"
\n
"
)
local
xml
=
simplexml
.
parse_string
(
substring
)
for
_
,
tr
in
ipairs
(
xml
.
children
)
do
-- Get film title & year
local
film_title
=
nil
local
film_year
=
nil
local
node
=
tr
.
children
[
2
]
-- td
if
node
then
node
=
node
.
children
[
1
]
end
-- div (1)
if
node
then
node
=
node
.
children
[
1
]
end
-- div (2)
local
subnode
=
nil
if
node
then
for
_
,
subnode
in
ipairs
(
node
.
children
)
do
if
subnode
.
name
==
"a"
and
type
(
subnode
.
children
[
1
])
==
"string"
then
film_title
=
trim
(
subnode
.
children
[
1
])
-- content of a tag
else
if
subnode
.
name
==
"span"
and
type
(
subnode
.
children
[
1
])
==
"string"
then
film_year
=
trim
(
subnode
.
children
[
1
])
end
end
end
end
-- Get film cover & URL
local
film_image
=
nil
local
film_url
=
nil
local
node
=
tr
.
children
[
1
]
-- td
if
node
then
node
=
node
.
children
[
1
]
end
-- a
if
node
and
node
.
name
==
"a"
then
film_url
=
node
.
attributes
[
"href"
]
node
=
node
.
children
[
1
]
if
node
and
node
.
name
==
"img"
then
film_image
=
node
.
attributes
[
"src"
]
end
end
-- Append fetched information
if
film_title
then
if
string.sub
(
film_url
,
1
,
4
)
~=
"http"
then
film_url
=
"http://www.allocine.fr"
..
film_url
end
films
[
#
films
+
1
]
=
{
url
=
film_url
;
image
=
film_image
;
year
=
film_year
;
title
=
film_title
}
end
end
end
end
-- Print information
-- No results found
if
#
films
==
0
then
message_text
=
"<center>Aucun résultat trouvé pour <b>"
..
string.gsub
(
name
,
"%+"
,
" "
)
..
"</b>.</center>"
..
"Vous pouvez aussi chercher directement sur <a href=\"" .. url .. "
\
">Allociné</a>."
message
:
set_text
(
message_text
)
end
-- Only one movie or TV show matches, let's open its page directly
if
#
films
==
1
then
message_text
=
"<center><a href=\"" .. films[1].url .. "
\
">"
..
films
[
1
].
title
..
"</a></center>"
message
:
set_text
(
message_text
)
dlg
:
update
()
open_fiche
(
films
[
1
].
url
)
end
-- More than 1 match, display a list
if
#
films
>
1
then
message_text
=
tostring
(
#
films
)
..
" films ou séries TV trouvés sur Allociné :"
message
:
set_text
(
message_text
)
list
=
dlg
:
add_list
(
1
,
3
,
3
,
1
)
for
idx
,
film
in
ipairs
(
films
)
do
local
txt
=
film
.
title
if
film
.
year
then
txt
=
txt
..
" ("
..
film
.
year
..
")"
end
list
:
add_value
(
txt
,
idx
)
end
okay
=
dlg
:
add_button
(
"Voir la fiche"
,
click_okay
,
3
,
4
,
1
,
1
)
end
end
-- Click after selection
function
click_okay
()
if
not
films
or
not
#
films
then
return
end
local
selection
=
list
:
get_selection
()
if
not
selection
then
return
end
local
sel
=
nil
for
idx
,
selectedItem
in
pairs
(
selection
)
do
sel
=
idx
break
end
if
not
sel
then
return
end
message_text
=
"<center><a href=\"" .. films[sel].url .. "
\
">"
..
films
[
sel
].
title
..
"</a></center>"
message
:
set_text
(
message_text
)
dlg
:
update
()
open_fiche
(
films
[
sel
].
url
)
end
-- Open a movie's information page
function
open_fiche
(
url
)
if
okay
then
dlg
:
del_widget
(
okay
)
okay
=
nil
end
if
list
then
dlg
:
del_widget
(
list
)
list
=
nil
end
if
not
html
then
html
=
dlg
:
add_html
(
"<center><i>Chargement en cours...</i></center>"
,
1
,
3
,
3
,
1
)
end
dlg
:
update
()
-- Open stream
local
s
=
vlc
.
stream
(
url
)
local
data
=
s
:
read
(
65535
)
-- HACK: use directly HTML data from webpage
local
first
,
_
=
string.find
(
data
,
'<div class="rubric">'
)
local
last
,
_
=
string.find
(
data
,
'<ul id="link_open"'
)
if
not
last
then
last
,
_
=
string.find
(
data
,
'notationbar'
)
end
local
subdata
=
string.sub
(
data
,
first
,
(
last
or
0
)
-
1
)
subdata
=
string.gsub
(
subdata
,
"%s+"
,
" "
)
subdata
=
string.gsub
(
subdata
,
"href=([\"
'])/", "href=%1http://www.allocine.fr/")
html:set_text(subdata)
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment