英文:
imdbpy - cannot get the episode ids
问题
我是Python的初学者。
我正在尝试使用Imdbpy获取有关电影的一些信息。代码如下:
ia = IMDb()
results = ia.search_movie(movie_name)
movie_id = results[0].getID()
movie = ia.get_movie(movie_id)
如果movie_name
是一个系列名称,我将获取剧集的ID:
episode_ids = ia.get_movie_episodes(movie)
但我遇到了一个错误,我不知道如何修复它。错误如下:
Traceback (most recent call last):
File "e:\python\file_name\film_names.py", line 333, in
writing_imdb_S(film_name, path, file_oldname_need, prefix_and_suffix)
File "e:\python\file_name\film_names.py", line 146, in writing_imdb_S
episode_ids = ia.get_movie_episodes(movie)
...
http.client.InvalidURL: URL can't contain control characters. '/title/ttThe Last of Us/episodes' (found at least ' ')
我对此没有做任何处理,因为我不太了解URL和请求以及imdbpy本身。如果你能帮我解决这个问题,我将不胜感激。
英文:
I'm a beginner at Python.
I am trying to get some information about a movie using Imdbpy. The code looks like this:
ia = IMDb()
results = ia.search_movie(movie_name)
movie_id = results[0].getID()
movie = ia.get_movie(movie_id)
and if the movie_name
is a series name I am going to get the episodes ids:
episode_ids = ia.get_movie_episodes(movie)
but I get an error that I do not know how to fix it:
the error:
Traceback (most recent call last):
File "e:\python\file_name\film_names.py", line 333, in
<module>
writing_imdb_S(film_name, path,file_oldname_need, prefix_and_sufix)
File "e:\python\file_name\film_names.py", line 146, in
writing_imdb_S
episode_ids = ia.get_movie_episodes(movie)
File "C:\Users\mahdi\AppData\Roaming\Python\Python310-32\site-packages\imdb\parser\http\__init__.py", line 631,
in get_movie_episodes
cont = self._retrieve(self.urls['movie_main'] % movieID + 'episodes')
File "C:\Users\mahdi\AppData\Roaming\Python\Python310-32\site-packages\imdb\parser\http\__init__.py", line 392,
in _retrieve
ret = self.urlOpener.retrieve_unicode(url, size=size) File "C:\Users\mahdi\AppData\Roaming\Python\Python310-32\site-packages\imdb\parser\http\__init__.py", line 233, in retrieve_unicode
response = uopener.open(url)
File "C:\Program Files (x86)\Python310-32\lib\urllib\request.py", line 519, in open
response = self._open(req, data)
File "C:\Program Files (x86)\Python310-32\lib\urllib\request.py", line 536, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "C:\Program Files (x86)\Python310-32\lib\urllib\request.py", line 496, in _call_chain
result = func(*args)
File "C:\Program Files (x86)\Python310-32\lib\urllib\request.py", line 1391, in https_open
return self.do_open(http.client.HTTPSConnection, req, File "C:\Program Files (x86)\Python310-32\lib\urllib\request.py", line 1348, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "C:\Program Files (x86)\Python310-32\lib\http\client.py", line 1282, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Program Files (x86)\Python310-32\lib\http\client.py", line 1293, in _send_request
self.putrequest(method, url, **skips)
File "C:\Program Files (x86)\Python310-32\lib\http\client.py", line 1127, in putrequest
self._validate_path(url)
File "C:\Program Files (x86)\Python310-32\lib\http\client.py", line 1227, in _validate_path
raise InvalidURL(f"URL can't contain control characters. {url!r} "
http.client.InvalidURL: URL can't contain control characters. '/title/ttThe Last of Us/episodes' (found at least ' ')
(I just pasted it idk which part is important.)
I did not do anything about it because I don't really know about urls and request and imdbpy it self.
I would appreciate it if you help me about it.
I don't know if you need these but I'm trying to get these information:
['title', 'year', 'rating', 'season', 'episode_number', 'episode_title', 'episode_rating', 'genres']
答案1
得分: 0
我认为按照文档获取剧集的正确方法是:
> 可以使用“episodes”信息集来获取系列的剧集。这个信息集添加了一个名为“episodes”的键,它是一个从季节号到剧集的字典。而每个季节都是一个从季节内剧集号到剧集的字典。请注意,季节和剧集号不是从0开始的;它们是由IMDb提供的数字:
>
>
> >>> ia.update(series, 'episodes')
> >>> sorted(series['episodes'].keys()) # 这里的键实际上是季节号!
> [1, 2, 3, 4]
> >>> season4 = series['episodes'][4]
> >>> len(season4)
> 13
> >>> episode = series['episodes'][4][2]
> >>> episode
> <Movie id:1038701[http] title:"The 4400" Fear Itself (2007)>
> >>> episode['season']
> 4
> >>> episode['episode']
但要小心,这里的series
对象与您的movie
对象相同。您可以在文档中找到更多信息:https://cinemagoer.readthedocs.io/en/latest/usage/series.html#series
英文:
I think the correct way to get the episodes, by the doc, is:
> The episodes of a series can be fetched using the “episodes” infoset. This infoset adds an episodes key which is a dictionary from season numbers to episodes. And each season is a dictionary from episode numbers within the season to the episodes. Note that the season and episode numbers don’t start from 0; they are the numbers given by the IMDb:
>
>
> >>> ia.update(series, 'episodes')
> >>> sorted(series['episodes'].keys()) # the keys here are actually season number!
> [1, 2, 3, 4]
> >>> season4 = series['episodes'][4]
> >>> len(season4)
> 13
> >>> episode = series['episodes'][4][2]
> >>> episode
> <Movie id:1038701[http] title:"The 4400" Fear Itself (2007)>
> >>> episode['season']
> 4
> >>> episode['episode']
But be careful that the series
object here is the same as your movie
object. You can find more information on the doc: https://cinemagoer.readthedocs.io/en/latest/usage/series.html#series
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论