WEIRD "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"
WEIRD "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)"
问题: 当我尝试使用下面的第一个代码时,我得到了 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
。所有这些代码昨天都运行良好,昨天也停止工作了。今天它也不起作用。奇怪的是,我刚刚启动了第二个代码(也在下面),它工作了一次,然后在另一次启动后又遇到了同样的问题!
行抛出错误:
post_info = instagram_web_api.media_info2("<SHORTCODE>")
求助:(。俄罗斯堆栈溢出没有答案。
我用instagram-private-api 1.6.0.0
1-st 代码 当我得到那个错误时:
from instagram_web_api import Client
instagram_web_api = Client(auto_patch=False, drop_incompat_keys=False)
post_info = instagram_web_api.media_info2('CVNgb7us34V') # Get the short code.
post_text = post_info['edge_media_to_caption']['edges'][0]['node']['text']
print(post_text)
二次码:
from instagram_web_api import Client
web_api = Client(auto_patch=False, drop_incompat_keys=False)
user_feed_info = web_api.user_feed('329452045', count=10)
问题出在您使用的库和 instagram 之间:后者没有将您 JSON 发送到您期望的位置。
如果您查看 the source 的 media_info2
,它看起来像这样:
def media_info2(self, short_code):
"""
Alternative method to get media info. This method works for carousel media.
:param short_code: A media's shortcode
:param kwargs:
:return:
"""
headers = {
'User-Agent': self.user_agent,
'Accept': '*/*',
'Accept-Language': 'en-US',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Referer': 'https://www.instagram.com',
'x-requested-with': 'XMLHttpRequest',
}
info = self._make_request(
'https://www.instagram.com/p/{0!s}/'.format(short_code),
query={'__a': '1', '__b': '1'},
headers=headers)
...
根据您的回溯,错误在 make_request
中。所以我们去看看 the source ,我们看到重要的几行是:
self.logger.debug('REQ DATA: {0!s}'.format(data))
res = self.opener.open(req, data=data, timeout=self.timeout)
...
if return_response:
return res
response_content = self._read_response(res)
self.logger.debug('RES BODY: {0!s}'.format(response_content))
return json.loads(response_content)
我们现在拥有了进行一些手动调试所需的一切,因为程序是这样工作的:
- 设置headers并将它们和url传递给make_request
- 从url
获取数据
- 将日期解析为 json
- return数据
我们 可以 将我们自己的调用放在一起 opener
,甚至 运行 curl
在 url 通过到 _make_request
,或临时修改代码以打印一些内容并更加冗长。但在这种情况下,我们有一个更简单的选择:代码将 已经 为我们调试自身,我们只需要告诉它是冗长的:
import logging
logging.basic_config(level=logging.DEBUG)
将它放在失败脚本的顶部并再次 运行 它应该会喷出大量数据,告诉您它到底在做什么。由于它打印了 整个 return body,你应该得到它的任何内容 returning,并且能够弄清楚发生了什么。
记住....使用来源,卢克。
好吧,那太糟糕了,但了解代码正在做什么的唯一方法是阅读源代码。 python 的伟大之处在于它的可读性。将此与试图通过阅读找出一些 C++ 库进行比较...
问题是因为 Instagram 有时不允许很多请求,所以在我多次请求后,它阻止了我从 post 获取任何信息的权限。解决办法是在API登录。就这些了。
问题: 当我尝试使用下面的第一个代码时,我得到了 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
。所有这些代码昨天都运行良好,昨天也停止工作了。今天它也不起作用。奇怪的是,我刚刚启动了第二个代码(也在下面),它工作了一次,然后在另一次启动后又遇到了同样的问题!
行抛出错误:
post_info = instagram_web_api.media_info2("<SHORTCODE>")
求助:(。俄罗斯堆栈溢出没有答案。
我用instagram-private-api 1.6.0.0
1-st 代码 当我得到那个错误时:
from instagram_web_api import Client
instagram_web_api = Client(auto_patch=False, drop_incompat_keys=False)
post_info = instagram_web_api.media_info2('CVNgb7us34V') # Get the short code.
post_text = post_info['edge_media_to_caption']['edges'][0]['node']['text']
print(post_text)
二次码:
from instagram_web_api import Client
web_api = Client(auto_patch=False, drop_incompat_keys=False)
user_feed_info = web_api.user_feed('329452045', count=10)
问题出在您使用的库和 instagram 之间:后者没有将您 JSON 发送到您期望的位置。
如果您查看 the source 的 media_info2
,它看起来像这样:
def media_info2(self, short_code):
"""
Alternative method to get media info. This method works for carousel media.
:param short_code: A media's shortcode
:param kwargs:
:return:
"""
headers = {
'User-Agent': self.user_agent,
'Accept': '*/*',
'Accept-Language': 'en-US',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Referer': 'https://www.instagram.com',
'x-requested-with': 'XMLHttpRequest',
}
info = self._make_request(
'https://www.instagram.com/p/{0!s}/'.format(short_code),
query={'__a': '1', '__b': '1'},
headers=headers)
...
根据您的回溯,错误在 make_request
中。所以我们去看看 the source ,我们看到重要的几行是:
self.logger.debug('REQ DATA: {0!s}'.format(data))
res = self.opener.open(req, data=data, timeout=self.timeout)
...
if return_response:
return res
response_content = self._read_response(res)
self.logger.debug('RES BODY: {0!s}'.format(response_content))
return json.loads(response_content)
我们现在拥有了进行一些手动调试所需的一切,因为程序是这样工作的:
- 设置headers并将它们和url传递给make_request
- 从url 获取数据
- 将日期解析为 json
- return数据
我们 可以 将我们自己的调用放在一起 opener
,甚至 运行 curl
在 url 通过到 _make_request
,或临时修改代码以打印一些内容并更加冗长。但在这种情况下,我们有一个更简单的选择:代码将 已经 为我们调试自身,我们只需要告诉它是冗长的:
import logging
logging.basic_config(level=logging.DEBUG)
将它放在失败脚本的顶部并再次 运行 它应该会喷出大量数据,告诉您它到底在做什么。由于它打印了 整个 return body,你应该得到它的任何内容 returning,并且能够弄清楚发生了什么。
记住....使用来源,卢克。
好吧,那太糟糕了,但了解代码正在做什么的唯一方法是阅读源代码。 python 的伟大之处在于它的可读性。将此与试图通过阅读找出一些 C++ 库进行比较...
问题是因为 Instagram 有时不允许很多请求,所以在我多次请求后,它阻止了我从 post 获取任何信息的权限。解决办法是在API登录。就这些了。