class XiamiRadio::User

There is a user as you saw

Attributes

is_vip[R]
level[R]
nick_name[R]
sign[R]
user_id[R]

Public Class Methods

new() click to toggle source
# File lib/xiami_radio/user.rb, line 11
def initialize
  @cookie_jar = HTTP::CookieJar.new
  @cookie_jar.load cookie_file if File.exist? cookie_file
  get_user_info
end

Public Instance Methods

login?() click to toggle source
# File lib/xiami_radio/user.rb, line 17
def login?
  !user_id.to_s.empty?
end
login_by_email(email, password) click to toggle source
# File lib/xiami_radio/user.rb, line 21
def login_by_email(email, password)
  page_uri = login_client.uri(path: '/member/login')
  form_uri = login_client.uri(path: '/passport/login')
  login_client.get page_uri, format: :html
  form_data = {
    _xiamitoken: xiami_token,
    done: 'http%3A%2F%2Fwww.xiami.com%2F%2F',
    verifycode: '',
    account: email,
    pw: password,
    submit: '登录'
  }
  login_client.post form_uri, form_data, headers: {
    'Content-Type' =>       'application/x-www-form-urlencoded; charset=UTF-8',
    'Referer' => page_uri.to_s
  }
  @cookie_jar.save cookie_file
  get_user_info
end
login_by_member_auth(member_auth) click to toggle source
# File lib/xiami_radio/user.rb, line 41
def login_by_member_auth(member_auth)
  uri = client.uri path: '/index/home'
  @cookie_jar.parse "member_auth=#{member_auth}; path=/; domain=.xiami.com", uri
  client.get uri, format: :head
  @cookie_jar.save cookie_file
  get_user_info
end
xiami_token() click to toggle source
# File lib/xiami_radio/user.rb, line 49
def xiami_token
  cookie_jar.cookies.select { |c| c.name == '_xiamitoken' }.first&.value
end

Private Instance Methods

client() click to toggle source
# File lib/xiami_radio/user.rb, line 55
def client
  @client ||= Client.new user: self, headers: {
    referer:'https://www.xiami.com/index'
  }
end
get_user_info() click to toggle source
# File lib/xiami_radio/user.rb, line 65
def get_user_info
  update client.get(client.uri path: '/index/home').dig(:data, :userInfo)
  Notice.push "欢迎归来 #{nick_name},当前已连续签到 #{sign[:persist_num]} 天", 10 if login?
end
login_client() click to toggle source
# File lib/xiami_radio/user.rb, line 61
def login_client
  @l_client ||= Client.new user: self, host: Client::LOGIN_HOST
end
update(attrs) click to toggle source
# File lib/xiami_radio/user.rb, line 70
def update(attrs)
  return false unless attrs.is_a? Hash
  @nick_name, @level, @user_id, @sign, @is_vip = attrs.values_at :nick_name, :level, :user_id, :sign, :isVip
  true
end