Voddler Plugin

:: Update Jan 2012 :.

Download and How to install:

https://github.com/drohr/plex-voddler-plugin







----------





I have been wanting a Voddler plugin lately (simply because their webpage is not very remote friendly) so today I decided to do something about it:


http://img832.imageshack.us/img832/5729/screenshot20110510at000.png



http://img94.imageshack.us/img94/5729/screenshot20110510at000.png



I haven't touched Python in several years so it might take some time before I get anything interesting rolling.


The movie genres are hardcoded urls at the moment pointing towards two YQL feeds that scrapes the voddler homepage. The feeds are really easy to setup so adding all existing categories should be easy. The current ones list the 200 most popular movies for each genre (thought 200 would be a big enough number)

**Covers:**
Couldn't figure out how to load the external images correctly (got the cover urls in my feed) so the Pans Labyrinth image is included in the bundle as of now to make it feel less empty.

**Starting movies:**
[s]As for starting movies I was thinking of trying to launch the external http url for each movie, exiting Plex temporarily. Haven't tried it yet but think it should work by using the following url structure:

http://www.voddler.com/en/video/play/2788190073758226675/the-cider-house-rules/

[/s]

The user need to be logged in, so will need something clever to trick it. Edit: I just tried this and apparently they’ve created a flash player that launches the movie from the browser since the last time I watched a movie so maybe, maybe movies could be launched inside plex now








These screens should be possible to map inside Plex right?

**Url to the flash player:**

http://player.voddler.com/VoddlerPlayer.swf



**API**
Update: Apparently there's a publicly available API for fetching movie info in JSON format:

http://api.voddler.com/metaapi/info/1?videoId=2788190073758226675


If there's a way to get movie listings it would be nice to get rid of the YQL feeds
Update: Here's the search api (returns results in json as well)

http://api.voddler.com/metaapi/search/1?offset=0&count=10&q=cider



**Resources**
http://userscripts.org/scripts/review/80873 - Found some interesting Voddler related stuff here

Feel free to post

Looks promising, I’m sure with that much meta data easily available you should be able to make something really nice. If you’re looking for similar plugins, you might want to check out a BlinkBox one that i’ve been working on on the side (https://github.com/IanDBird/blinkbox.bundle). It’s a basic plugin that uses Flash. I still need to sort out the Site Config a little more to handle restart/continue button clicks, fast forward/rewind and the seek bar.



Anyway, if you get stuck at all with it, just post your queries and I (and i’m sure others) will try and have a look.

Thanks for the advice (and source)!



I believe getting the site config right is key to this as well. Haven’t got any experience with that yet but will give it a shot when I get the chance!



Saving for later: The player for the site config



Settings:

<br />
<site site="http://*.voddler.com" plugin="http://player.voddler.com/VoddlerPlayer.swf" initialState="playing" version="1.0"><br />
<br />
<crop x="0" y="26" width="654" height="334" /><br />
<br />
<seekbar type="simple"> <br />
   <start x="66" y="346" /><br />
   <end x="551" y="346" /> <br />
   <played><br />
      <color rgb="008ACE" /><br />
      <color rgb="535353" /><br />
   </played><br />
</seekbar> <br />
<br />
<condition name="paused"><br />
   <color x="29" y="348" rgb="B9B9B9" /><br />
</condition><br />
<br />
<state name="playing"><br />
   <event><br />
      <condition><br />
         <command name="pause" /><br />
      </condition><br />
      <action><br />
         <click x="29" y="348" /><br />
         <goto state="paused" /><br />
      </action><br />
   </event><br />
</state><br />
<state name="paused"><br />
   <event><br />
      <condition><br />
         <command name="play" /><br />
      </condition><br />
      <action><br />
         <click x="29" y="348" /><br />
         <goto state="playing" /><br />
      </action><br />
   </event><br />
</state><br />




Ironically enough I'm not sure I understand the "The Moment of Truth" step here: http://wiki.plexapp.com/index.php/Creating_Plugins_Site_Config#The_Moment_of_Truth

Didn’t you mention that the site requires the user to login before they can access the videos? If this is the case, the Site Configuration needs to perform the authentication by itself, as in you can’t do it straight from the python. I’ve got an (overcomplicated) example of when i’ve had to do this:



https://github.com/IanDBird/SkyPlayer.bundle/blob/master/Contents/Site%20Configurations/skyplayer.xml


Wow thanks for that! Will have to give it a try and see if it I can get it to work in this case. Found this url for the login (returns the status as json):

http://www.voddler.com/en/user/authenticate/?urlok=/en/&cc_user_username=[username]&cc_user_password=[password]

Seem’s ideal, you wont need the “cleanup” state from my example and probably not the manual lock stuff…



The login url looks ideal, it seems the website is providing a lot of good access to it so it shouldn’t be too tough. Good luck!

Looks like it’s connecting to the page now but it hangs on this screen:



I guess something needs polishing in my Site Configuration, but seeing the movie title feels good. Making progress :rolleyes:

Looking good.



You should have a look at the Plex Media Server.log for information as to what is happening. You should see Plex attempt to move through the states defined within the state machine. Also, from the example I sent attached, you probably don’t need the manualLock or lockplugin statements. If you want me to have a look at what you’ve got so far, just paste the contents of the file in.

I’ve hardcoded my username and password in the file (you’ll see I’ve excluded them here though). As you can see I’m trying to use the login box on the actual webpage at the moment since I’m unsure if the web service login is really helpful in this case. Need to store the login/session ID somewhere (it’s included in the url when the browser gets redirected after successful login). It’s used for subsequent calls such as starting the movie.



<?xml version="1.0" encoding="UTF-8"?><br />
<site site="http://.*.voddler.com"<br />
    plugin="http://player.voddler.com/VoddlerPlayer.swf"<br />
    initialState="wait-for-frame-load"<br />
    manualLock="true"<br />
    version="1.0"><br />
<br />
    <!-- Crop the control to better fill the application --><br />
    <crop x="0" y="26" width="654" height="334" /><br />
<br />
    <!-- The condition we use several times from within states to check if we're logged in or not --><br />
    <condition name="need-to-login"><br />
        <and><br />
            <!-- Check if a specific element exists in the page, for example the loginform --><br />
            <!-- Returns true if we need to login --><br />
            <!-- <javascript script="document.cookie.indexOf('; skySSO=')" matches="-1" /> --><br />
            <javascript script="document.getElementById('login_link').id" matches="login_link" /><br />
        </and><br />
    </condition><br />
<br />
    <!-- Wait for frame to load --><br />
    <state name="wait-for-frame-load"><br />
        <event><br />
            <condition><br />
                <!-- Wait for the DOM to load... --><br />
                <frameLoaded /><br />
            </condition><br />
            <action><br />
                <!-- ...then goto the 'check-for-auth' state --><br />
                <goto state="check-for-auth" /><br />
            </action><br />
        </event><br />
    </state><br />
<br />
    <!-- Check for auth --><br />
    <state name="check-for-auth"><br />
        <event><br />
            <condition><br />
                <!-- If we don't need to login, goto state 'playing' --><br />
                <not><br />
                    <condition name="need-to-login" /><br />
                </not><br />
            </condition><br />
            <action><br />
                <goto state="playing" /><br />
            </action><br />
        </event><br />
        <event><br />
            <!-- If we *do* need to login, visit the login url and attempt to submit it --><br />
            <condition><br />
                <condition name="need-to-login" /><br />
            </condition><br />
            <action><br />
                <!-- The state machine will wait until the URL has fully loaded before moving --><br />
                <!-- onto the next state. --><br />
                <visit url="http://www.voddler.com/en/login"/><br />
                <goto state="try-to-login"/><br />
            </action><br />
        </event><br />
    </state><br />
<br />
    <!-- Try to login --><br />
    <state name="try-to-login"><br />
        <event><br />
            <condition><br />
                <!-- No condition required --><br />
                <javascript script="true ? 1 : 0" matches="1" /><br />
            </condition><br />
            <action><br />
                <!-- Fill in the username, password and nexturl of the page. --><br />
                <!-- We need to submit the form so that the page's handlers can populate the other --><br />
                <!-- required post data. --><br />
                <!--<br />
                <run script="page='${url}';index=page.indexOf('/page/');document.login.userName.value='${username}';document.login.password.value='${password}';document.login.nextUrl.value=page.substring(index);document.login.submit();" /><br />
                --><br />
                <run script="document.getElementsByName('email')[0].value='<hardcoded email>';document.getElementsByName('password')[0].value='<hardcoded password>';document.getElementsByClass('button_submit')[0].click()" /><br />
                <pause time="2000" /><br />
                <goto state="check-for-auth-again" /><br />
            </action><br />
        </event><br />
    </state><br />
<br />
    <!-- Check for auth again --><br />
    <state name="check-for-auth-again"><br />
        <event><br />
            <condition><br />
                <!-- If login was successful we should now not need to login and can go to the state 'cleanup' --><br />
                <not><br />
                    <condition name="need-to-login" /><br />
                </not><br />
            </condition><br />
            <action><br />
                <visit url="${url}" /><br />
                <goto state="playing" /><br />
            </action><br />
        </event><br />
        <event><br />
            <condition><br />
                <!-- If we still need to login after we've tried to login, something is wrong... --><br />
                <condition name="need-to-login" /><br />
            </condition><br />
            <action><br />
                <goto state="end" param="Please check your username and password in the plugin's settings" /><br />
            </action><br />
        </event><br />
    </state><br />
<br />
    <!-- Playing --><br />
    <state name="playing"><br />
        <event><br />
            <condition><br />
                <javascript script="true ? 1 : 0" matches="1" /><br />
            </condition><br />
            <action><br />
                <!-- Done! We don't need to do anything else here --><br />
            </action><br />
        </event><br />
    </state><br />
<br />
</site>



Is there any way to log values from the DOM fetched via javascript to the log file?

[s]Looks like it (my javascript) might be failing at the login step[/s]

removed old log for easier reading




**UPDATE**: Got past the login screen! document.getElementsBy**ClassName**('button_submit')[0].click(); is the method to use...


The log continues:


May 11, 2011 23:47:04 [0xa0a51540] DEBUG - Executing Moving to state check-for-auth-again<br />
<br />
Check if logged in:<br />
May 11, 2011 23:47:04 [0xa0a51540] DEBUG - Executed 'document.getElementById('login_link').id' and now seeing if [undefined] matches [login_link]<br />
<br />
Login_link is missing so we proceed to the actual url:<br />
May 11, 2011 23:47:04 [0xa0a51540] DEBUG - Executing Visiting ${url}<br />
May 11, 2011 23:47:04 [0xa0a51540] DEBUG - Browsing to URL: http://www.voddler.com/en/movie/info/2788190073758226675/the-cider-house-rules/<br />
May 11, 2011 23:47:04 [0xa0a51540] DEBUG - Stopping execution, waiting for 1<br />
<br />
What's this?<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - 0x1aa4aac0 Plugin loaded [(null)] (0 1830 300 150 )<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - 0x17008d30 Plugin loaded [eas.statcamp.net/media.4/149/12560/126847/250x360_cdf5c772.swf?clickTAG=http://eas.statcamp.net/eas/cu=0::camp=126847::no=176815::kw=link1-176815::encoding=utf-8::EASLink=http://clk.tradedoubler.com/click?p=206289%26loc=95214%26g=19678948%26url=http://a7f62bea-50a0-4b04-bd6f-3e2aacfddde9.statcamp.net/turl/?id=ac1cec7beea5414b9ae0fcb22aca9b5c%26cid=f983badbbf064fa8b31566519cd6ac44%26lpid=62b6aa113d0f451caa1988c7973ea106] (0 0 250 360 eas_13051504264806)<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Frame was loaded.<br />
<br />
Checking if we're still logged in:<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Executed 'document.getElementById('login_link').id' and now seeing if [undefined] matches [login_link]<br />
<br />
We are, but should it really load the page again?<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Executing Visiting ${url}<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Browsing to URL: http://www.voddler.com/en/movie/info/2788190073758226675/the-cider-house-rules/<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Stopping execution, waiting for 1<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Frame was loaded.<br />
<br />
Launching play state:<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Executing Moving to state playing<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Received title [The Cider House Rules - Voddler.com Movies].<br />
May 11, 2011 23:47:06 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:07 [0xa0a51540] DEBUG - Received title [ ].<br />
May 11, 2011 23:47:07 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:08 [0xa0a51540] DEBUG - Received title [Like | Facebook].<br />
May 11, 2011 23:47:08 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:08 [0xa0a51540] DEBUG - 0x170a8be0 Plugin loaded [(null)] (0 1723 300 150 )<br />
May 11, 2011 23:47:08 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:08 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
<br />
This looks like commercials which makes sense, but maybe it's just a banner on the page.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - 0x28f9760 Plugin loaded [track.adform.net/Banners/Elements/Files/2101/15622.swf?ADFassetID=15622&bv=7] (-9999 -9999 250 360 adfdiv_850961921411_swf)<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Received title [XD Proxy].<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Frame was loaded.<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]<br />
May 11, 2011 23:47:09 [0xa0a51540] DEBUG - Executed 'true ? 1 : 0' and now seeing if [1] matches [1]



Any ideas?

So, it appears that Plex is moving through the states define in the Site Config, and even getting to the Playing state. However, you still have the manualLock defined in it and you’re not using it. You should probably change the start of the file to something like:



<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<site site="http://.*.voddler.com"<br />
    plugin="http://player.voddler.com/VoddlerPlayer.swf"<br />
    initialState="wait-for-frame-load"<br />
    version="1.0"><br />
...<br />




Also, I would remove the ... stuff as you may not need this. If you do, it's probably also got the completely wrong parameters as was only appropriate for the SkyPlayer site config.

Give that a go and let me know what happens...

I've removed the manualLock without success yet. I tried to follow the wiki when I did the the crop parameters so they shouldn't be completely off unless I've missed something crucial but I will try to remove them as you say.

Thanks for all your great input so far! Really keeps me going

Also, Voddler have been kind and given me specifications for their movie listings, details and searching (sadly not for sharing) so I should be able to remove the scraping completely later on.

Just to check, are you restarting the Plex Server component every time you change the Site Config? It only picks up changes when the server is restarted. This caught me out a number of times :slight_smile:



I tried joining the service to see if I could take a look at what was going on but just received “service not available” when I requested an invite. Just to check, when you are logged in, and browse to http://www.voddler.com/en/movie/info/2788190073758226675/the-cider-house-rules/ there is a flash element embedded in the page? It appears that Plex is navigating to it and not managing to find the element then. Normally, what should happen is that Plex scans the page and finds the first Flash element which it renders off screen. This would then be presented within the client…



As a side note, you mention that the specifications are “not for sharing”. Just to point out that if you want to distribute this to anyone else, you will need to post the .bundle file which is simply a folder containing a load of python. It would not be very difficult for someone to look at the source to find out this API, etc.


:o Don't think I did..


It's only available in Sweden, Norway, Denmark, Finland and soon Spain as of yet. Could that be it?


It looks like it should be the first flash object on the page. Looks like this:


<object width="654" height="370" type="application/x-shockwave-flash" data="http://player.voddler.com/VoddlerPlayer.swf" id="flashplayer" style="visibility: visible;"><param name="allowScriptAccess" value="always"><param name="wmode" value="opaque"><param name="allowFullScreen" value="true"><param name="id" value="player"><param name="flashvars" value="videoid=2788190073758226675&amp;cridid=2788190073758811224&amp;token=022e3057bb8cb41333a0f7fdae5171d6&amp;domain=http://www.voddler.com&amp;prebanner_content=http://www.voddler.com/ox/log?bannerid=342&amp;campaignid=3&amp;zoneid=34&amp;loc=http%3A%2F%2Fwww.voddler.com%2Fen%2Fmovie%2Finfo%2F2788190073758226675%2Fthe-cider-house-rules%2F&amp;referer=http%3A%2F%2Fwww.voddler.com%2Fen%2Fmovie%2Finfo%2F2788190073758226675%2Fthe-cider-house-rules%2F&amp;cb=673a4e9e41&amp;dest=http://www.voddler.com/public/ox/8b2042280d48d0ece996c5929be574f3.jpg&amp;prebanner_click=http://www.voddler.com/ox/click?oaparams=2__bannerid=342__zoneid=34__cb=673a4e9e41__oadest=http%3A%2F%2Fwww.google.com&amp;postbanner_content=http://www.voddler.com/ox/log?bannerid=325&amp;campaignid=3&amp;zoneid=32&amp;loc=http%3A%2F%2Fwww.voddler.com%2Fen%2Fmovie%2Finfo%2F2788190073758226675%2Fthe-cider-house-rules%2F&amp;referer=http%3A%2F%2Fwww.voddler.com%2Fen%2Fmovie%2Finfo%2F2788190073758226675%2Fthe-cider-house-rules%2F&amp;cb=5f76d7f0ac&amp;dest=http://www.voddler.com/public/ox/67958b4f8d9cda53cf5b8680f812e11f.png&amp;postbanner_click=http://www.voddler.com/ox/click?oaparams=2__bannerid=325__zoneid=32__cb=5f76d7f0ac__oadest=http%3A%2F%2Fwww.blt.se&amp;language=en_US"></object>



I have noticed however that the first thing that happens is it plays a commercial in fullscreen mode. Exiting fullscreen will pause the commercial. Don't know if this will cause issues or not.


To clarify I am under no obligations towards them, no NDA or similar. They just didn't want me to spread the actual documents around so I thought it would be nice to honor their request. They were fully aware of that people could figure out their api:s without the documentation (like sniffing it etc)

I would definitely try again with the “manualLock” removed. The log looks like it is actually working and just not finding the control, which is what I would expect if “manualLock=true” is set without a “lockplugin” statement.



Let me know what you find



Yep! That's voddler inside Plex! I realized that when the plugin visits the movie url it also have to click a "play" link to launch the swf. Fixed that now

Huge step forward!


Next issue:


When the movie is loaded and ready to play it displays this play button. Needs mapping.

If you've already started watching this movie earlier you will get these buttons instead:



:D

Awesome, well done.



This leads to the next question… Should the plugin always start from the beginning and just allow the user to skip, e.g. fast forward? You could make it configurable in the plugin so that it will always “Restart” or always “Resume”. The preference could be accessed by the Site Config to determine which X coordinate to send the click. Just some thoughts…

Trying to solve the ‘start movie’ click after the buffering process without much success. It just stops (the log is iterating the ‘playing’ state until this button shows), and I am wondering if my color check really works.




The click need to occur inside the blue circle, not on it.


<br />
    <condition name="need-to-click-resume-choice"><br />
        <and><br />
            <color x="20" y="20" rgb="000000" /><br />
            <color x="10" y="10" rgb="000000" /><br />
        </and><br />
    </condition><br />
    <br />
    <condition name="need-to-click-start-movie"><br />
        <and><br />
            <color x="327" y="167" rgb="ebebeb" /><br />
            <color x="327" y="117" rgb="009bd6" /><br />
        </and><br />
    </condition><br />
    <br />
    <condition name="need-to-click-play-button"><br />
        <and><br />
            <javascript script="$('#playmoviebutton')[0].id" matches="playmoviebutton" /><br />
        </and><br />
    </condition><br />
<br />
    <!-- Playing --><br />
    <state name="playing"><br />
        <event><br />
            <condition><br />
                <!-- When the movie is buffered we need to click on it to start it --><br />
                <condition name="need-to-click-start-movie" /><br />
            </condition><br />
            <action><br />
            	<click x="327" y="167" /><br />
            	<pause time="1000" /><br />
            </action><br />
        </event><br />
	    <br />
    	<event><br />
            <condition><br />
                <!-- When we reach the movie we need to click the play button --><br />
                <condition name="need-to-click-play-button" /><br />
            </condition><br />
            <action><br />
                <run script="$('#playmoviebutton').click()" /><br />
                <pause time="2000" /><br />
            </action><br />
        </event><br />
        <br />
        <event><br />
            <condition><br />
                <!-- When we reach the movie we need to click the play button --><br />
                <condition name="need-to-click-resume-choice" /><br />
            </condition><br />
            <action><br />
                <click x="307" y="167" /><br />
                <pause time="2000" /><br />
            </action><br />
        </event><br />
<br />
<br />
    </state>



Any suggestions?

Free movies starts fine after a set of commercials now!



I have however found that switching between fullscreen and windowed mode messes things up and leave you with a blank screen (of death. Seriously, the frustration will kill you).





I have also realized that I will need to implement a state for the purchase screen if you select a paid movie (basically just automate a click on the accept button)… Which might get expensive to test :wacko:



Clicking a movie in the list is not always working and might need 1 to 3 tries before it actually launches. This will need some polishing as well.

Are you going to keep a single Site Config for everything, or have two (1 for free stuff, 1 for pay to view)? You could always ask nicely if the website would give you a temporary account which allowed you to develop your application using?

I’m thinking of letting the user choose whether to show paid and/or free movies in the list. If a paid movie is clicked a state in the site config will have to be triggered and purchase the movie for the user in the background. All the needed credit card data will have to be saved on the account already though (happens the first time you buy a movie) or this will fail.



Anyway, exchanged my webpage scraper feed with the voddler api and I am happy to report it’s a bliss. One question though, how do I display an external cover image? I want to do something similar to this:


<br />
imageUrl = "http://s2.voddler.com/33399/assets/imageservice/boximage/8/9/89ee29079c0e81a6d44bad80bdd69bd7b937ddad74f5a885bfb69df01bc2f20d.jpg"<br />
thumb=R(imageUrl)





ok update: I am an idiot :rolleyes: got the images working