Browse Source

Merge remote-tracking branch 'fiocfun/xtube-user-extractor'

master
Philipp Hagemeister 11 years ago
parent
commit
bfcb6e3917
3 changed files with 47 additions and 2 deletions
  1. 9
      test/test_playlists.py
  2. 2
      youtube_dl/extractor/__init__.py
  3. 38
      youtube_dl/extractor/xtube.py

9
test/test_playlists.py

@ -38,6 +38,7 @@ from youtube_dl.extractor import (
GenericIE, GenericIE,
TEDIE, TEDIE,
ToypicsUserIE, ToypicsUserIE,
XTubeUserIE,
) )
@ -278,5 +279,13 @@ class TestPlaylists(unittest.TestCase):
self.assertEqual(result['id'], 'Mikey') self.assertEqual(result['id'], 'Mikey')
self.assertTrue(len(result['entries']) >= 17) self.assertTrue(len(result['entries']) >= 17)
def test_xtube_user(self):
dl = FakeYDL()
ie = XTubeUserIE(dl)
result = ie.extract('http://www.xtube.com/community/profile.php?user=greenshowers')
self.assertIsPlaylist(result)
self.assertEqual(result['id'], 'greenshowers')
self.assertTrue(len(result['entries']) >= 155)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

2
youtube_dl/extractor/__init__.py

@ -288,7 +288,7 @@ from .worldstarhiphop import WorldStarHipHopIE
from .xhamster import XHamsterIE from .xhamster import XHamsterIE
from .xnxx import XNXXIE from .xnxx import XNXXIE
from .xvideos import XVideosIE from .xvideos import XVideosIE
from .xtube import XTubeIE
from .xtube import XTubeUserIE, XTubeIE
from .yahoo import ( from .yahoo import (
YahooIE, YahooIE,
YahooNewsIE, YahooNewsIE,

38
youtube_dl/extractor/xtube.py

@ -75,4 +75,40 @@ class XTubeIE(InfoExtractor):
'comment_count': comment_count, 'comment_count': comment_count,
'formats': formats, 'formats': formats,
'age_limit': 18, 'age_limit': 18,
}
}
class XTubeUserIE(InfoExtractor):
IE_DESC = 'XTube user profile'
_VALID_URL = r'https?://(?:www\.)?xtube\.com/community/profile\.php\?(.*?)user=(?P<username>[^&#]+)(?:$|[&#])'
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
username = mobj.group('username')
profile_page = self._download_webpage(
url, username, note='Retrieving profile page')
video_count = int(self._search_regex(
r'<strong>%s\'s Videos \(([0-9]+)\)</strong>'%username, profile_page,
'video count'))
PAGE_SIZE = 25
urls = []
page_count = (video_count + PAGE_SIZE + 1) // PAGE_SIZE
for n in range(1, page_count + 1):
lpage_url = 'http://www.xtube.com/user_videos.php?page=%d&u=%s' % (n, username)
lpage = self._download_webpage(
lpage_url, username,
note='Downloading page %d/%d' % (n, page_count))
urls.extend(
re.findall(r'addthis:url="([^"]+)"', lpage))
return {
'_type': 'playlist',
'id': username,
'entries': [{
'_type': 'url',
'url': eurl,
'ie_key': 'XTube',
} for eurl in urls]
}
Loading…
Cancel
Save