# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # 乘车指南

# <span style="float: left">Prev: None</span>
# <span style="float: right">Next: <a href="./example.html">简单的例子 🌰</a></span>

import jike

# 创建即刻客户端
#
# 初次使用会要求使用即刻App扫描二维码登录
#
# 登录成功之后，会在`~/.local/jike/jike_metro.json`存储即刻的`auth_token`，后续的使用则会跳过扫描二维码的步骤

c = jike.JikeClient()

# ## 查看自己的用户信息
#
# 调用： `get_my_profile()`  
# 返回： `User`，自己的用户信息 （基于`collection.namedtuple`）

my_profile = c.get_my_profile()
my_profile

print(my_profile.screenName)
print(my_profile.briefIntro)

# ## 获取自己的收藏
#
# 调用： `get_my_collection()`  
# 返回： `List`，自己的收藏 （基于`collection.abc.Sequence`）

my_collection = c.get_my_collection()
my_collection

my_collection[0]

guoguo = my_collection[0]
guoguo.likeCount

# 加载所有收藏

my_collection.load_all()
my_collection

# ## 流式获取首页消息和动态

# - 获取消息  
#
#     调用： `get_news_feed()`  
#     返回： `Stream`，消息流 （基于`collection.deque`）

news_feed = c.get_news_feed()
news_feed

news_feed[0]

news_feed.load_more()
news_feed

# - 获取动态  
#
#     调用： `get_following_update()`  
#     返回： `Stream`，动态流 （基于`collection.deque`）

following_update = c.get_following_update()
following_update

following_update[0]

following_update.load_more()
following_update

# - 获取当前未读消息数  
#
#     调用：`get_news_feed_unread_count()`  
#     返回：`int`，未读消息数

c.get_news_feed_unread_count()

# ## 获取某个用户的用户信息、发布的动态、创建的主题、关注的主题、TA关注的人和关注TA的人

# - 获取某个用户的用户信息  
#
#     调用： `get_user_profile(username)`  
#     参数： `username`: 指定用户的用户名（注：不是用户的显示名，而是类似 [瓦总个人页面](https://web.okjike.com/user/82D23B32-CF36-4C59-AD6F-D05E3552CBF3/) 在浏览器地址栏中 `https://web.okjike.com/user/` 后的部分）  
#     返回： `User`, 用户信息 （基于`collection.namedtuple`）

ceo = c.get_user_profile(username='82D23B32-CF36-4C59-AD6F-D05E3552CBF3')
ceo

ceo.briefIntro

# - 获取某个用户发布的动态  
#
#     调用： `get_user_post(username)`  
#     参数： `username`: 指定用户的用户名  
#     返回： `List`, 用户发布的动态 （基于`collection.abc.Sequence`）

ceo_posts = c.get_user_post(username='82D23B32-CF36-4C59-AD6F-D05E3552CBF3')
ceo_posts

ceo_posts[0]

ceo_posts.load_more()
ceo_posts

# `load_all` 约运行了10s

ceo_posts.load_all()
ceo_posts

# 瓦总的第一条动态

ceo_posts[-1]

ceo_posts[-1].createdAt

# - 获取某个用户创建的主题
#
#     调用： `get_user_created_topic(username)`  
#     参数： `username`: 指定用户的用户名  
#     返回： `List`, 用户创建的主题 （基于`collection.abc.Sequence`）

ceo_created_topics = c.get_user_created_topic(username='82D23B32-CF36-4C59-AD6F-D05E3552CBF3')
ceo_created_topics[0]

# - 获取某个用户关注的主题
#
#     调用： `get_user_subscribed_topic(username)`  
#     参数： `username`: 指定用户的用户名  
#     返回： `List`, 用户关注的主题 （基于`collection.abc.Sequence`）

ceo_subscribed_topics = c.get_user_subscribed_topic(username='82D23B32-CF36-4C59-AD6F-D05E3552CBF3')
ceo_subscribed_topics[0]

# - 获取某个用户关注的人
#
#     调用： `get_user_following(username)`  
#     参数： `username`: 指定用户的用户名  
#     返回： `List`, 用户关注的人 （基于`collection.abc.Sequence`）

ceo_followings = c.get_user_following(username='82D23B32-CF36-4C59-AD6F-D05E3552CBF3')
ceo_followings[0]

# - 获取关注某个用户的人
#
#     调用： `get_user_follower(username)`  
#     参数： `username`: 指定用户的用户名  
#     返回： `List`, 关注指定用户的人 （基于`collection.abc.Sequence`）

ceo_followers = c.get_user_follower(username='8<PASSWORD>')
ceo_followers[0]

# ## 获取某个主题下的精选和广场

# - 获取某个主题下的精选
#
#     调用： `get_topic_selected(topic_id)`  
#     参数： `topic_id`: 指定主题的id，类似于 [不好笑便利店](https://web.okjike.com/topic/5701d10d5002b912000e588d/official) 地址栏部分在 `https://web.okjike.com/topic/`之后的部分  
#     返回： `Stream`, 主题精选（基于`collection.deque`）

topic_selected = c.get_topic_selected(topic_id='5701d10d5002b912000e588d')
topic_selected[0]

# - 获取某个主题下的广场
#
#     调用： `get_topic_square(topic_id)`  
#     参数： `topic_id`: 指定主题的id  
#     返回： `Stream`, 主题广场（基于`collection.deque`）

topic_square = c.get_topic_square(topic_id='5701d10d5002b912000e588d')
topic_square[0]

# ## 获取某条消息/动态的评论

# 调用： `get_comment(message)`  
# 参数： `message`: 要获取评论的消息/动态  
# 返回： `Stream`, 评论 （基于`collection.deque`）  

comments = c.get_comment(topic_square[0])
comments

max(comments, key=lambda c: c.likeCount)

# ## 在浏览器中打开某条消息的原始链接
#
# 调用：`open_in_browser(url_or_message)`  
# 参数：`url_or_message`: url 或者 message (例如`topic_selected[0]`，这是一条`OfficialMessage`)  
# 返回：`None`

c.open_in_browser(topic_selected[0])

# ## 发布个人动态（可带图、带链接、带主题）
#
# 调用： `create_my_post(content, link, topic_id, pictures)`  
# 参数： `content`: 要发布的内容 / `link`: 所带的链接 / `topic_id`: 所带主题的id / `pictures`: 所带图的本地地址（注：由于即刻的限制，动态不能同时带有图片和链接）  
# 返回： `OriginalPost`，所发布的动态 （基于`collection.namedtuple`）

my_new_post = c.create_my_post('Hello world from Jike Metro 🚇!')
my_new_post

# ## 点赞、收藏、评论、转发某条消息/动态 

# - 点赞某条消息/动态
#
#     调用： `like_it(message)`  
#     参数： `message`: 要赞的消息/动态  
#     返回： `Bool`, 成功与否

c.like_it(my_new_post)

# - 取消赞某条消息/动态
#
#     调用： `unlike_it(message)`  
#     参数： `message`: 要取消赞的消息/动态  
#     返回： `Bool`, 成功与否

c.unlike_it(my_new_post)

# - 收藏某条消息/动态
#
#     调用： `collect_it(message)`  
#     参数： `message`: 要收藏的消息/动态  
#     返回： `Bool`, 成功与否

c.collect_it(my_new_post)

# - 取消收藏某条消息/动态
#
#     调用： `uncollect_it(message)`  
#     参数： `message`: 要取消收藏的消息/动态  
#     返回： `Bool`, 成功与否

c.uncollect_it(my_new_post)

# - 转发某条消息/动态
#
#     调用： `repost_it(content, message, sync_comment)`  
#     参数： `content`: 转发的评论内容 / `message`: 要转发的消息或动态 / `sync_comment`: 是否同步评论，默认为`True`  
#     返回： `Repost`, 发布的转发 （基于`collection.namedtuple`)

c.repost_it('Support Jike Metro 🚇', my_new_post)

# - 评论某条消息/动态
#
#     调用： `comment_it(content, message, pictures, sync2personal_updates)`  
#     参数： `content`: 要评论内容 / `message`: 要评论的消息或动态 / `pictures`: 所带图的本地地址 / `sync2personal_updates`: 是否同步到个人动态，默认为`True`  
#     返回： `Comment`, 发布的评论 （基于`collection.namedtuple`)

c.comment_it('Upvote for Jike Metro 🚇', my_new_post)

# ## 删除个人动态

# 调用： `delete_my_post(post)`  
# 参数： `post`: 要删除的动态  
# 返回： `Bool`, 成功与否  

c.delete_my_post(my_new_post)

# ## 根据关键词搜索主题

# 调用： `search_topic(keywords)`  
# 参数： `keywords`：搜索的关键词  
# 返回： `List`， 搜索到的主题， （基于`collection.abc.Sequence`)  

topics = c.search_topic(keywords='apple')
topics

[topic['content'] for topic in topics]

# ------
#
# <span style="float: left">Prev: None</span>
# <span style="float: right">Next: <a href="./example.html">简单的例子 🌰</a></span>

StarcoderdataJupyterScriptsDedupFiltered