EchterAlsFake/PHUB

List index out of range

EchterAlsFake opened this issue · 3 comments

Hey,

I got the following error:

Traceback (most recent call last):
 File "/home/asuna/PycharmProjects/Porn_Fetch/Porn_Fetch.py", line 449, in start
   video = self.test_video(url)
           ^^^^^^^^^^^^^^^^^^^^
 File "/home/asuna/PycharmProjects/Porn_Fetch/Porn_Fetch.py", line 434, in test_video
   self.video = self.client.get(url)
                ^^^^^^^^^^^^^^^^^^^^
 File "/home/asuna/PycharmProjects/Porn_Fetch/venv/lib/python3.11/site-packages/phub/core.py", line 328, in get
   return classes.Video(client = self, url = url, preload = preload)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "/home/asuna/PycharmProjects/Porn_Fetch/venv/lib/python3.11/site-packages/phub/classes.py", line 185, in __init__
   self.refresh()
 File "/home/asuna/PycharmProjects/Porn_Fetch/venv/lib/python3.11/site-packages/phub/classes.py", line 206, in refresh
   self.data = parser.resolve(self)
               ^^^^^^^^^^^^^^^^^^^^
 File "/home/asuna/PycharmProjects/Porn_Fetch/venv/lib/python3.11/site-packages/phub/parser.py", line 80, in resolve
   script = video.page.split("flashvars_['nextVideo'];")[1].split('var nextVideoPlay')[0]
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
IndexError: list index out of range

I tried with my UI and with your CLI script.

I used the V3.2.1 API version, but I haven't tried it with V4 as you said it would be unstable and not production ready.

Hey

Yeah v4 is absolutely not ready, there is so much work to be done, and i can't put time in a project of that scale right now.

About the issue, this is caused by a PH update.
They have removed their old obfuscated M3U master url. PHUB already work around it, using mediaDefinitions urls. The real problem is, I have no idea why the parser was still trying to parse it, if it was/still is nescessary or not.

I'm in no state to commit something as of now, i'll fix that later this weekend. In the meantime, here is a monkeypatch to apply after importing phub.

import phub

def patch(video: phub.Video) -> dict:
    '''
    Monkey patch for phub.parser.resolve. 
    '''
    
    phub.utils.log('parser', 'Resolving page JS script...', level = 6)
    
    for _ in range(phub.parser.RENEW_MAX_ATTEMPTS):
        response = phub.consts.regexes.video_flashvar(video.page)
        
        if not len(response):
            phub.parser.renew(video)
            continue
        
        flash, ctx = response[0]
        break
    
    else:
        raise phub.errors.ParsingError('Max renew attempts exceeded.')
    
    # Load context
    return phub.parser.json.loads(ctx)

phub.parser.resolve = patch

# Then do whatever you want as normal
client = phub.Client()

video = client.get(key = '...')
video.download('test.mp4', 'best')

Tell me if it fixes the error.
Have a great day (or night)

Issue is fixed with the patch.

Thanks for the quick reply :)

Fixed and released with 3.2.2. Thanks!