upbit / pixivpy

Pixiv API for Python
https://pypi.org/project/PixivPy3/#files
The Unlicense
1.8k stars 147 forks source link

illust_follow是如何工作的? #109

Closed reimu1234 closed 4 years ago

reimu1234 commented 4 years ago

打扰issues一下,请教一个问题,illust_follow是如何工作的? 如果我手机上用第三客户端浏览过某一张作品,然后一个月后我想在pc上用illust_follow这api获取作者的新作,那么这张浏览过的图片还会获取到吗?

以前我是使用api(单线程)获取第一页,然后和下载过的链接对比,判断是否是新作。最近在每获取百来个或者几十个id的时候总是遇到返回'JsonDict' object has no attribute 'illusts'信息,或者File "E:\py3\lib\site-packages\pixivpy3\api.py", line 67, in requests_call raise PixivError('requests %s %s error: %s' % (method, url, e)) pixivpy3.utils.PixivError: requests GET https://app-api.pixiv.net/v1/user/illusts error: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

断开十来分钟后才能继续获取就比较烦,所以来请教一下这个api的原理

去年提过这个错误的issue,初步判断是的代理不稳定的问题 这一年来切换了几个代理亦是如此,现在看来应该是别的原因,路过看到的朋友有没这种情况?

Xdynix commented 4 years ago

illust_follow不会记录你是否有访问过,只会按时间逆序返回你关注的所有用户的所有作品,你还是需要自己判断何时停止。

代理不稳定问题没什么办法,只能自己加重试。

reimu1234 commented 4 years ago

illust_follow不会记录你是否有访问过,只会按时间逆序返回你关注的所有用户的所有作品,你还是需要自己判断何时停止。

代理不稳定问题没什么办法,只能自己加重试。

你们没有这个问题吗/笑哭

upbit commented 4 years ago

嗯,从客户端上体验,多次刷新返回的内容是一样的,因此应该没做曝光过滤。要持续追踪某个作者的新作,可以试试拉取指定user_id发表的作品,翻页到某个已知时间戳停止

上面错误是Connection aborted,如果代理不稳定,你可以试下Bypass API内网访问,避免走代理

upbit commented 4 years ago

illust_follow不会记录你是否有访问过,只会按时间逆序返回你关注的所有用户的所有作品,你还是需要自己判断何时停止。 代理不稳定问题没什么办法,只能自己加重试。

你们没有这个问题吗/笑哭

因为我是在google colab上或者本地调试,还真没遇到过 Connection aborted 😢

reimu1234 commented 4 years ago

illust_follow不会记录你是否有访问过,只会按时间逆序返回你关注的所有用户的所有作品,你还是需要自己判断何时停止。 代理不稳定问题没什么办法,只能自己加重试。

你们没有这个问题吗/笑哭

因为我是在google colab上或者本地调试,还真没遇到过 Connection aborted 😢

试了,80个id后就又'JsonDict' object has no attribute 'illusts'了😂

Mikubill commented 4 years ago

这个情况有可能是撞上了Rate Limit

reimu1234 commented 4 years ago

这个情况有可能是撞上了Rate Limit

好难啊 我只是单线程 且一个月爬一次都这样😂

Mikubill commented 4 years ago

好难啊 我只是单线程 且一个月爬一次都这样😂

Rate Limit貌似是分钟内API请求数限制,稍微等一下应该就可以恢复啦

~其实pixivpy-async有自动重试功能(小声~

upbit commented 4 years ago

不一定是Rate Limit,要看 PixivError 抛出异常的原因。单线程可以每次请求间sleep(0.5)下,很少碰到被ban

假如是Connection aborted,可以这样分析:

  1. 如果你挂了代理,有可能是代理不稳定,可考虑重试或者换example_bypass_sni.py的方法,在墙内直接访问试试;
  2. 如果真是Rate Limit,重试也会返回一样的错误;
reimu1234 commented 4 years ago

Connection aborted

换了bypass api ,每个id sleep5秒只拉取一到两页在第98个id时Connection aborted了😂

reimu1234 commented 4 years ago

sleep 10效果比较好 凑合解决吧😂