Regex is a not so fun method of predetermining the data you want to find usually when you do a search of data like the contents of a web page. You use Regex to tell the search what to look for so you can find specific pieces of data. For for example '/(\d{5,6})\.html' would find a 5 or 6 digit number that that is followed by '.html' Here is a good page that explains the basics of it http://www.regular-expressions.info/reference.html.
Regex is not fun or easy. It is something I am just now getting comfortable with the basics of, but it is necessary in Plex channel programming.
As far as which version of Python, it used to vary based on the Plex OS used. I was just told that the latest version of PMS bundles it's own copy of python 2.7. Prior to that it was anywhere from 2.5 (OSX) up to 2.7 (linux).
The code above is not really double coding, the MainMenu() function just pulls up the sections as a directory to show the title and info related to the videos and uses a callback to the second menu and the second menu actually processes the videos and allows them to play it. As I had said in an earlier post, it is probably not best to bring up media directly in your main menu. You would be asking Plex to do a lot of things all at once as soon as you open up the channel plugin, if you did not add the extra step of sending the video request to the Lookup() funtion since it would have to process any code necessary for starting the channel like the plist and process the videos all as soon as you open the channel otherwise. Especially because you are not using any type of redirect or indirect method that would tell the channel to wait until the user clicks play to process everything related to the video request.
To process data that may be in an html, xml, json, or other formatted page, you would use the Plex parsing API and most likely use that parsing API along with xpath. There are some good basic tutorials on this pinned at the beginning of this forum. The parsing API options are listed in the Framework Documentation available here http://dev.plexapp.com/
It all depends on your particular project, if you only have a couple hard coded direct links to video files that you are accessing that will only be access by you in this personal channel you may not need a separate URL service.
But I tend to think that with most projects, it is best to use a separate URL service. Anytime you are able to specify the pattern of the URL being used by the channel to access media files, so it can be directed properly to a separate URL service, I think that separating that code with a separate URL service helps simplify the project. And most examples of channels you find use a separate URL service to process the media files and it also allows the service to provide info for programs like plexit and additional data needed for certain clients.
With a separate URL service, you can focus the code of your channel to just display the video info like the metadata and a URL for accessing the actual videos. And then that channel would send that URL on to the URL service which can focus on locating and processing the media files based on the formats, qualities, etc. that may be available for you to use. Also, trying to pull data from a site or URL within the same function that processes your media requires extra care to ensure it does not cause delays that will cause Plex to timeout before it returns the video. Even a very basic URL service that just defines the MediaObjects and has a very basic side function to determine the address of the video files can greatly simplify the code needed in your channel.
If you are trying to access video playlist, if those files contain metadata like title, description, etc that would be processed in your channel code. But if that video playlist contains data to help you locate of the actual video files associated with a channel and the different formats available, then that could be processed in a separate URL service.
One big advantage of a separate URL service is that since a URL service allows you to separate the code needed for the metadata and the actual media files, it also allows you to fully test and debug those portions of code independently, so you can know that access the the media is possible and working, prior to building the channel with all the supporting data you want to pull when accessing that media.
If you do not to create a separate URL service, here is an example of a channel that includes a function to process media. https://github.com/shopgirl284/RSSFeed.bundle This example channel handles RSS feeds that either have an existing Plex URL service or include a direct link to the media files within the XML page submitted to it. The only reason I did not create a separate URL service for this example channel is because it would be impossible to determine the pattern of the URL that would be sent to that URL service, since the user can input a wide variety of URL addresses. And that lack of a URL pattern would make Plex unable to determine which URLs to send to a separate URL service for this channel.
Also, if you are planning on actually building a data file to contain specific info, the above example shows code for accessing a JSON file that is transferred to a local dictionary file.