コード例 #1
0
 def vote_up(self):
     """
     赞同
     """
     r = self._execute(method="post",
                       url=URL.vote_up(self.id),
                       json={"type": "up"})
     if r.ok:
         return r.json()
     else:
         raise ZhihuError("操作失败:%s" % r.text)
コード例 #2
0
ファイル: __init__.py プロジェクト: zhihaowen/zhihu-api
 def _user_slug(self, profile_url):
     """
     profile_url 转 user_slug
     :param profile_url:
     :return:
     """
     pattern = re.compile("https?://www.zhihu.com/people/([\w-]+)")
     match = pattern.search(profile_url)
     if match:
         user_slug = match.group(1)
         return user_slug
     else:
         raise ZhihuError("invalid profile url")
コード例 #3
0
ファイル: common.py プロジェクト: xsongx/zhihu-api
    def user(self, user_slug=None, profile_url=None, **kwargs):
        """
        获取用户信息
        :param user_slug : 用户的个性域名
        :param profile_url: 用户主页地址

        :return:dict

        >>> user(profile_url = "https://www.zhihu.com/people/xiaoxiaodouzi")
        >>> user(user_slug = "xiaoxiaodouzi")

        """
        if not any([profile_url, user_slug]):
            raise ZhihuError("至少指定一个关键字参数")

        user_slug = self._user_slug(profile_url) if user_slug is None else user_slug
        response = self._session.get(URL.profile(user_slug), **kwargs)

        if response.ok:
            return response.json()
        else:
            raise ZhihuError("操作失败:%s" % response.text)
コード例 #4
0
    def unfollow(self, user_slug=None, profile_url=None, **kwargs):
        """
        取消关注用户
        :param user_slug:
        :param profile_url:
        :return: {"follower_count": int}

        >>> unfollow(profile_url = "https://www.zhihu.com/people/xiaoxiaodouzi")
        >>> unfollow(user_slug = "xiaoxiaodouzi")
        """
        if not any([profile_url, user_slug]):
            raise ZhihuError("至少指定一个关键字参数")

        user_slug = self._user_slug(
            profile_url) if user_slug is None else user_slug
        response = self._session.delete(URL.follow_people(user_slug), **kwargs)
        if response.ok:
            data = response.json()
            data['followed'] = False
            return data
        else:
            raise ZhihuError("操作失败:%s" % response.text)
コード例 #5
0
    def login(self, account, password):
        """
        账户登录
        :param account: email或者手机号码
        :param password:
        :return:
        """
        email_regex = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)"
        phone_regex = r"\+?\d{10,15}$"
        email_pattern = re.compile(email_regex)
        phone_pattern = re.compile(phone_regex)

        if email_pattern.match(account) or phone_pattern.match(account):
            return self._login_api(account, password)
        else:
            raise ZhihuError("无效的用户名")
コード例 #6
0
    def follow(self, user_slug=None, user_url=None):
        """
        关注用户
        :param user_slug:
        :param user_url:
        :return: {"follower_count": int}

        >>> follow(profile_url = "https://www.zhihu.com/people/xiaoxiaodouzi")
        >>> follow(user_slug = "xiaoxiaodouzi")
        """
        response = self._execute(method="post", url=URL.follow_people(user_slug))
        if response.ok:
            data = response.json()
            data['followed'] = True
            return data
        else:
            raise ZhihuError("操作失败:%s" % response.text)
コード例 #7
0
ファイル: zhihu.py プロジェクト: abbychau/zhihu-api
    def followers(self, user_slug=None, limit=20, offset=0, user_url=None):
        """
        获取某个用户的粉丝列表
        :param user_slug:
        :param user_url:
        :param limit: 最大返回数量
        :param offset:游标
        :param kwargs:
        :return:
                {
                    "paging": {
                        "is_end": true,
                        "totals": 1381207,
                        "is_start": false,
                    },
                    "data": [{
                        "avatar_url_template": "https://pic1.zhimg.com/fdbce7544_{size}.jpg",
                        "badge": [],
                        "name": "OPEN",
                        "is_advertiser": false,
                        "url": "http://www.zhihu.com/api/v4/people/0fcb310a722c5bb99d864ace7bb2d89c",
                        "url_token": "open",
                        "user_type": "people",
                        "answer_count": 50,
                        "headline": "上知乎,恍然大悟!",
                        "avatar_url": "https://pic1.zhimg.com/fdbce7544_is.jpg",
                        "is_org": false,
                        "gender": 1,
                        "follower_count": 78,
                        "type": "people",
                        "id": "0fcb310a722c5bb99d864ace7bb2d89c"
                        },
                        ]
                    }
        """

        r = self._execute(method="get",
                          url=URL.followers(user_slug),
                          params={
                              "limit": limit,
                              "offset": offset
                          })
        if r.ok:
            return r.json()
        else:
            raise ZhihuError("操作失败:%s" % r.text)
コード例 #8
0
ファイル: common.py プロジェクト: lirenhong/zhihu-api
    def unfollow(self, user_slug=None, profile_url=None, **kwargs):
        """
        取消关注用户
        :param user_slug:
        :param profile_url:
        :return: {"follower_count": int}

        >>> unfollow(profile_url = "https://www.zhihu.com/people/xiaoxiaodouzi")
        >>> unfollow(user_slug = "xiaoxiaodouzi")
        """
        if not any([profile_url, user_slug]):
            raise ZhihuError("至少指定一个关键字参数")

        user_slug = self._user_slug(profile_url) if user_slug is None else user_slug
        response = self._session.delete(URL.follow_people(user_slug), **kwargs)
        if response.ok:
            return response.json()
        else:
            self.log(u"取消关注失败, status code: %s" % response.status_code)
コード例 #9
0
ファイル: account.py プロジェクト: abbychau/zhihu-api
 def register(self, name=None, phone_num=None, password=None):
     data = {
         "fullname": name,
         "phone_num": phone_num,
         "password": password,
         "_xsrf": super(Account, self)._get_xsrf(),
         "captcha": super(Account, self)._get_captcha(_type="register"),
         "captcha_source": "register",
     }
     valid = self._register_validate(data)
     if valid:
         self.log("账号验证成功,发送短信验证码")
         params = {"phone_num": phone_num, "captcha_source": "register"}
         # 发送验证码
         r = self._execute(method="get",
                           url=URL.register_sms_code(),
                           params=params)
         self.log(r.json().get("msg"))
         code = input("输入短信验证码:")
         data['verification_code'] = code
         data.pop("captcha")
         r = self._execute(method="post",
                           url=URL.register(),
                           data=data,
                           data_type=RequestDataType.FORM)
         if r.ok and r.json().get("r") == 0:
             self.log("注册成功")
             return r.json()
         else:
             if r.ok and r.json().get("r") != 0:
                 self.log(r.json().get("msg"), level=logging.ERROR)
             if not r.ok:
                 self.log("请求失败", level=logging.ERROR)
             return r.json()
     else:
         raise ZhihuError("验证失败,请查看日志")
コード例 #10
0
 def __init__(self, id=None, url=None):
     id = id if id is not None else self._extract_id(url)
     if not id:
         raise ZhihuError("没有指定问题的id或者url")
     self.id = str(id)
     super(Question, self).__init__()
コード例 #11
0
ファイル: answer.py プロジェクト: piaoransk/zhihu-api
 def __init__(self, id=None, url=None):
     id = id if id is not None else self._extract_id(url)
     if not id:
         raise ZhihuError("没有指定回答的id")
     self.id = str(id)
     super(Answer, self).__init__()
コード例 #12
0
 def __init__(self, slug=None, url=None):
     slug = slug if slug is not None else self._extract_slug(url)
     if not slug:
         raise ZhihuError("没有指定专栏的的slug或者url")
     self.slug = slug
     super(Column, self).__init__(headers=ZHUANLAN_HEADERS)