qq album

此文章完全转自他人博客(用于个人学习记录)
这个功能的实现关键在于找到每张图片的链接地址,之前一直不知道怎么找到,后来发现用SmartSniff分析数据包,很容易就找到了
/**
 * core class
 * 
 * @author wensefu.jerry.Ling<br/>
 *         wrote on 2011-1-28
 */
public class PhotoDownLoad {
 /*
  * sample uri: album:
  * http://xalist.photo.qq.com/fcgi-bin/fcg_list_album?uin=
  * 419758768&outstyle=2&t=0.7253889227680141&g_tk=5381 photo:
  * http://xaplist.
  * photo.qq.com/fcgi-bin/fcg_list_photo?uin=419758768&albumid=
  * e3b63b1c-2dce-4f86-ad02-c0f81a878615
  * &outstyle=json&t=0.9962191131376609&g_tk=5381
  */
 private static final String albumbase = "http://xalist.photo.qq.com/fcgi-bin/fcg_list_album?uin=";
 private static final String photobase = "http://xaplist.photo.qq.com/fcgi-bin/fcg_list_photo?uin=";
 private static final String charset = "gb2312";
 private static List<Album> albums; // 获取的所有相册
 private static final String savePath = "e://qqPhoto//"; // 图片保存位置的父目录
 private int curIndex = 0; // 每个相册当前正在下载的图片指针
 /**
  * 获取用户相册
  * 
  * @param qq
  * @return
  */
 public List<Album> getAlbums(String qq) {
  List<Album> result = new ArrayList<Album>();
  HttpClient client = new HttpClient();
  String getUri = albumbase + qq + "&outstyle=2"; // outstyle!=2服务器将以xml的形式返回结果,
              // 这里只以简单文本解析提取相关信息,不做xml解析了.
  HttpMethod method = new GetMethod(getUri);
  method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
    charset);
  int status = 0;
  try {
   status = client.executeMethod(method);
   if (status != HttpStatus.SC_OK) {
    System.err.println("发生网络错误!");
    return null;
   }
  } catch (HttpException e) {
   e.printStackTrace();
   return null;
  } catch (IOException e) {
   e.printStackTrace();
   return null;
  }
  InputStream is = null;
  BufferedReader br = null;
  InputStreamReader isr = null;
  List<String> ids = new ArrayList<String>();
  List<String> names = new ArrayList<String>();
  List<Integer> totals = new ArrayList<Integer>();
  try {
   is = method.getResponseBodyAsStream();
   isr = new InputStreamReader(is);
   br = new BufferedReader(isr);
   String temp = null;
   while ((temp = br.readLine()) != null) {
    if (temp.contains("/"id/" :")) {
     String id = temp.substring(temp.indexOf("/"id/" :") + 8,
       temp.length() - 2);
     ids.add(id);
    }
    if (temp.contains("/"name/" :")) {
     String name = temp.substring(
       temp.indexOf("/"name/" :") + 10, temp.length() - 3);
     names.add(name);
    }
    if (temp.contains("/"total/" :")) {
     String total = temp
       .substring(temp.indexOf("/"total/" :") + 10,
         temp.length() - 1);
     totals.add(Integer.parseInt(total));
    }
    if (temp.contains("/"left/" :")) {
     break;
    }
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   method.releaseConnection();
   try {
    br.close();
    isr.close();
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  for (int i = 0; i < ids.size(); i++) {
   Album album = new Album(ids.get(i), names.get(i), totals.get(i));
   result.add(album);
  }
  return result;
 }
 /**
  * 获取一个相册的图片信息
  * 
  * @param pid
  * @return
  */
 public List<Photo> getPhotoByAlbum(Album album, String qq) {
  List<Photo> result = new ArrayList<Photo>();
  HttpClient client = new HttpClient();
  System.out.println(album.getId());
  String getUri = photobase + qq + "&albumid=" + album.getId()
    + "&outstyle=json";
  HttpMethod method = new GetMethod(getUri);
  method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
    charset);
  int status = 0;
  try {
   status = client.executeMethod(method);
   if (status != HttpStatus.SC_OK) {
    System.err.println("发生网络错误!");
    return null;
   }
  } catch (HttpException e) {
   e.printStackTrace();
   return null;
  } catch (IOException e) {
   e.printStackTrace();
   return null;
  }
  InputStream is = null;
  BufferedReader br = null;
  InputStreamReader isr = null;
  List<String> names = new ArrayList<String>();
  List<String> urls = new ArrayList<String>();
  try {
   is = method.getResponseBodyAsStream();
   isr = new InputStreamReader(is);
   br = new BufferedReader(isr);
   String temp = null;
   boolean sign = false;
   while ((temp = br.readLine()) != null) {
    int len = temp.length();
    if (temp.contains("/"pic/" : [")) {
     sign = true;
    }
    if (sign && temp.contains("/"name/" :")) {
     String name = temp.substring(
       temp.indexOf("/"name/" :") + 10, len - 2);
     names.add(name);
    }
    if (temp.contains("/"url/" :")) {
     String url = temp.substring(temp.indexOf("/"url/" :") + 9,
       len - 3);
     urls.add(url);
    }
    if (temp.contains(" ],")) {
     break;
    }
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   method.releaseConnection();
   try {
    br.close();
    isr.close();
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  for (int i = 0; i < names.size(); i++) {
   Photo photo = new Photo();
   photo.setName(names.get(i));
   photo.setUrl(urls.get(i));
   photo.setAlbum(album);
   result.add(photo);
  }
  return result;
 }
 /**
  * 通过uri下载远程图片到本地
  * 
  * @param uri
  * @param name
  *            要保存的图片名(非路径)
  */
 public void saveImgFromUrl(Photo photo, String qq) {
  URL imgurl = null;
  BufferedInputStream bis = null;
  OutputStream os = null;
  try {
   imgurl = new URL(photo.getUrl());
   bis = new BufferedInputStream(imgurl.openStream());
   byte[] buffer = new byte[512];
   File path = new File(savePath + "//" + qq + "//"
     + photo.getAlbum().getName().trim());
   if (!path.exists()) {
    path.mkdirs();
   }
   os = new FileOutputStream(new File(path, photo.getName().trim()
     + ".jpeg"));
   int len = 0;
   while ((len = bis.read(buffer)) > 0) {
    os.write(buffer, 0, len);
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bis.close();
    os.flush();
    os.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
 /**
  * 下载一个相册的图片
  * 
  * @param index
  *            相册序号
  */
 public void savePhoto(final int index, final String qq) {
  Album album = albums.get(index);
  final List<Photo> photos = this.getPhotoByAlbum(album, qq);
  if (photos == null || photos.size() == 0) {
   System.out.println("相册" + album.getName() + "为空.");
   return;
  }
  final int maxThreadCnt = 10; // 每个相册最多开启10个线程进行下载
  final int total = album.getCnt();
  int realThreadCnt = total >= maxThreadCnt ? maxThreadCnt : total; // 实际下载一个相册的线程数
  /**
   * 线程驱动下载任务
   * 
   * @author wensefu.jerry.Ling<br/>
   *         wrote on 2011-1-29
   */
  class DownLoadTask implements Runnable {
   int id; // 线程标识
   int pindex;// 下载的图片指针
   public DownLoadTask(int id, int pindex) {
    this.id = id;
    this.pindex = pindex;
   }
   @Override
   public void run() {
    while (curIndex <= total - 1) {
     int temp = pindex;
     pindex = curIndex;
     curIndex++;
     Photo photo = photos.get(temp);
     System.out.println("线程" + (index + 1) + "_" + id + "开始下载第"
       + (index + 1) + "个相册第" + (pindex + 1) + "张图片...");
     saveImgFromUrl(photo, qq);
     System.out.println("线程" + (index + 1) + "_" + id + "完成第"
       + (index + 1) + "个相册第" + (pindex + 1) + "张图片下载");
    }
   }
  }
  ExecutorService exec = Executors.newCachedThreadPool();
  /*
   * 初始化各线程状态 此处给每个线程分配一个下载起始点
   */
  for (int i = 0; i < realThreadCnt; i++) {
   DownLoadTask task = new DownLoadTask(i + 1, i);
   exec.execute(task);
  }
  exec.shutdown();
 }
 public static void main(String[] args) {
  PhotoDownLoad pdl = new PhotoDownLoad();
  String qq = "402493283";
  albums = pdl.getAlbums(qq);
  if (albums == null || albums.size() == 0) {
   System.err.println("相册信息获取失败,可能是用户没有开放权限.");
   return;
  }
  int len = albums.size();
  System.out.println("相册信息获取成功,用户共有" + len + "个相册.");
  for (int i = 0; i < len; i++) { // 考虑到相册数量不会很多,相册采用顺序下载,不使用异步下载
   System.out.println("开始下载第" + (i + 1) + "个相册...");
   pdl.savePhoto(i, qq);
   pdl.curIndex = 0;
   System.out.println("第" + (i + 1) + "个相册下载完成.");
  }
 }
}





 

/**
 * 图片实体类
 * 
 * @author wensefu.jerry.Ling<br/>
 *         wrote on 2011-1-28
 */
public class Photo {
	private Album album;
	private String url;
	private String name;
	//getter and setter
         ....
}

/**
 * 相册实体类
 * 
 * @author wensefu.jerry.Ling<br/>
 *         wrote on 2011-1-28
 */
public class Album {
	private String id;
	private String name;
	private int cnt; // 图片张数
	public Album() {
	}
	/**
	 * @param id
	 * @param name
	 * @param cnt
	 */
	public Album(String id, String name, int cnt) {
		super();
		this.id = id;
		this.name = name;
		this.cnt = cnt;
	}
	//getter and setter
         ....
}

 

 

SAP打印错位问题终极解决指南:LP01设备格式设置全流程 本文详细解析了SAP系统中LP01设备打印错位问题的解决方案,重点介绍了SPAD事务码的配置流程和格式设置技巧。通过精准调整输出设备、设备类型和格式类型的匹配关系,有效解决'未定义格式'错误,确保打印内容准确对齐。文章还提供了高级排查方法和预防措施,帮助SAP管理员提升打印管理效率。 阅读详情

相关推荐

深度学习分类任务中,正负样本比例失衡的5种实战解决方案(附代码)

本文深入探讨了深度学习分类任务中正负样本比例失衡的5种实战解决方案,包括智能采样技术、动态数据增强、损失函数工程、模型架构创新和训练策略优化。针对信用卡欺诈检测、医疗诊断等场景,提供了详细的代码实现和评估方法,帮助开发者有效解决样本不平衡问题,提升模型在真实场景中的表现。

h9j8k7l6m5n的博客 424

python自动下载qq文件夹_GitHub - 1061700625/QQZone_AutoDownload_Album: Python+selenium 自动下载QQ空间相册...

QQZone_AutoDownload_AlbumPython+selenium 自动下载QQ空间相册.selenium_firefox.zip 需要解压后放在同路径下.貌似腾讯的登陆加密做的很复杂。所以用selenium模拟登陆的,这样就可以绕过复杂的登陆验证了,等登陆进去后,就可以随便浪啦,解析网页啥的跟普通差不多。【可下载他人空间相册】【更改为通用方法,导航栏无需更改为默认设置】【webp转...

weixin_39706861的博客 372

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

http://my.youkuaiyun.com/qq_27229113/album/show/323629

微信收货地址 :点击打开链接

大海技术博客 463

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 355

Pikachu靶场环境搭建(Windows环境下安装详细教程)

Pikachu靶场是一个漏洞测试练习平台。其中包含了常见的web安全漏洞,如果你是一个渗透测试学习者没有靶场的练手,那么pikachu是一个很好的测试平台。

weixin_42857656的博客 1823

1载波把32个信道按_[NCT] 正规2辑Pt.1荣登包含美国在内的全世界32个地区iTunes Top Album榜单第一名!...

点击关注SMTOWN 留言表白你本命NCT凭借正规2辑Pt.1在回归的同时横扫全球榜单榜首,人气持续高涨。于10月12日发行的《NCT - The 2nd Album RESONANCE Pt.1》荣登美国、加拿大、墨西哥、智利、巴西、新西兰、俄罗斯、匈牙利、澳大利亚、印度、印度尼西亚、日本、马来西亚、菲律宾、新加坡、泰国、越南、土耳其、秘鲁、乌克兰等全世界32个地区的iTunes To...

weixin_39782355的博客 130

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1059

通过QQ加密邮箱下载图片

http://b260.photo.store.qq.com/psbe?/a8f4c147-51d8-4494-8c4d-72f0673de2b1/XSXBgSIyX.qWztr6K1OpRHv3V45Wi38BTl.5xnQ8OECjG8iytJBAeXCWfeE8**Hk/b/YfP0.5qULAAAYpSoBpt0LAAA&bo=ngL2AQAAAAABAEw! http://a2

607

maxim max96712+max96717调试笔记

mxxim max96712 和max96717调试笔记

libuping2023的博客 1万+

Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端] [代码 + 资源热更] 功能的 简单实现演示

Unity热更有很多方案,各种lua热更,ILRuntime等,这里介绍的是YooAsset+HybridCLR的热更方案,HybridCLR负责更新c#代码,YooAsset负责更新资源。HybridCLR是一种创新的解决方案,专为 Unity 游戏开发中的热更新需求设计。它通过结合解释执行和 Ahead-of-Time (AOT) 编译技术,为跨平台的游戏开发提供了一种高效的热更新机制。原生C#热更新体验,开发工作流与传统Unity C#开发几乎相同,零学习和使用成本。

仙魁XAN 3866

iOS 第三方登陆 —— QQ

一、准备工作 1、到QQ开放平台(http://connect.qq.com/ )注册成为开发者,申请appkey, 2、在URL Types中添加QQ的AppID,其格式为:”tencent” + AppID    例如tencent1104463316 二、配置AppDelegate.m 1、导入 和两个头文件 2、配置函数: [objc] view p

st646889325的博客 814

`tokenizer.decode` 出现乱码或异常输出,怎么处理

摘要: 在使用Hugging Face Transformers库时,tokenizer.decode出现乱码或异常输出的解决方案包括:1)确保模型与分词器严格匹配,加载时使用trust_remote_code=True;2)谨慎处理特殊token,先保留所有token再针对性清理;3)校验模型输出token的维度和数值是否合法;4)通过convert_tokens_to_string替代解码;5)检查生成配置如max_new_tokens等参数。核心思路是确保模型与分词器逻辑对齐、输出token合法,必要

ZhangJiqun&191cm&85kg 584

EAGLE3-LLaMA3.1-Instruct-8B终极对比:EAGLE3 vs Medusa vs EAGLE-2谁最快

EAGLE3-LLaMA3.1-Instruct-8B 是专为 Llama-3.1-8B-Instruct 设计的 EAGLE3 投机解码草稿模型,可让大模型推理速度提升 3 倍以上。本文用最直白的方式讲清楚:EAGLE3、Medusa、EAGLE-2 三种加速方案到底有什么区别,谁才是真正的速度之王,以及新手如何三步跑起来。 ## 为什么 LLM 推理慢?先搞懂投机解码 大语言模型(LLM)

gitblog_00729的博客 199

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

腾讯新出了一款音乐app,它能代替QQ音乐吗?

在国内,QQ音乐拥有最大的音乐版权库,是名副其实的财大气粗。有许多好听的歌,只能在QQ音乐找到。而且,它紧跟潮流趋势,哪些歌曲点击率和收听率高,短短几天内,如果用户想下载到本地,就需要付费了,非常会抓取用户的心思来盈利。不过,QQ音乐的付费情况也是能为大众所接受的,每个月不到十块钱。但是对于那些想听简单音乐的人来说,QQ音乐的客户端有些过于繁琐和笨重。 最近腾讯新出了一款音乐app,叫“MOO”...

教程大咖的优快云创作中心 5790

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

QQ音乐API-借他人之力实现我的音乐盒

好久没有写博客了,最近升级做爸爸了,很开心的事情。内心又很忧郁,怎么能给媳妇和儿子一个相对好的物质经济条件。现在什么都没有的我,至少还有你们。 话不多说了,这篇博客还是和自己用vue做web app相关。 因为自己没有这些音乐 MV相关的资源,借人家的当然是捷径。也希望能帮助那些和我有同样需求的人。 qq音乐网址: https://y.qq.com 所有先关的API已经简单封装到h...

weixin_30652879的博客 262

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

常见限流算法:计数器、滑动窗口、漏桶、令牌桶

常见限流算法:计数器、滑动窗口、漏桶、令牌桶

weixin_42113716的博客 143

QQ音乐API搜索功能完全指南:热词、智能提示与精准搜索

想要为你的应用添加强大的音乐搜索功能吗?QQ音乐API的搜索模块提供了完整的三层搜索体系,让你轻松实现热词发现、智能提示和精准搜索。无论你是开发者还是技术爱好者,这篇终极指南将带你深入了解如何使用这些强大的搜索功能来提升用户体验。🎵 ## 🔥 搜索热词:掌握流行趋势 **核心功能**:`getHotkey`接口让你获取QQ音乐平台当前的搜索热词,了解用户正在搜索的热门内容。 ### 为什

gitblog_00280的博客 543

MySQL主从复制不一致,主要原因是?

MySQL主从复制不一致,主要原因是?

weixin_42113716的博客 105

cocos2d-x 学习日志(3)之QQ平台接入

简介 本文档主要介绍接入QQ平台的一些内容,便于查阅和使用。 第一步: 搭建QQSDK: 1.下载对应的SDK,将sdk这个目录添加到工程中,这样可以在代码中使用QQAPI了。本人选择如下iOS SDK,如下图 2.下载SDK后,打开文件如图: 3.打开《iOS SDK使用说明(MAC).webloc》按流程搭建好SDK。

小枫的专栏 5522

QQ音乐解析工具:2025年高效音乐数据获取完整解决方案

在数字音乐时代,高效获取和管理音乐数据成为开发者和音乐爱好者的共同需求。QQ音乐解析工具提供了一套完整的Python解决方案,通过智能API接口实现音乐信息提取、播放地址解析、歌单管理等功能,为音乐应用开发和个人收藏提供技术支撑。 ## 项目价值定位与技术优势 本项目基于Python 3.9开发,采用requests和pyexecjs库构建,核心价值在于解决了QQ音乐平台数据获取的技术难题。通

gitblog_00372的博客 457

LDDC源码解析:解密QQ音乐、酷狗音乐、网易云音乐歌词API

LDDC是一款简单易用的精准歌词下载匹配工具,支持QQ音乐、酷狗音乐、网易云音乐等主流平台的逐字歌词和卡拉OK歌词获取。本文将深入解析LDDC如何通过API接口与各大音乐平台交互,实现歌词的精准匹配与下载。 ## 一、歌词API架构设计 LDDC采用模块化设计,将不同音乐平台的歌词API封装为独立模块。核心接口定义在[LDDC/core/api/lyrics/__init__.py](http

gitblog_01018的博客 714

QQ音乐解析终极指南:从零开始构建你的私人音乐库完整解决方案

还在为无法自由收藏QQ音乐中的心爱歌曲而烦恼吗?想要拥有属于自己的音乐库却受限于平台限制?这款**QQ音乐解析工具**为你提供了一套完整解决方案,让你能够轻松获取、管理和享受高品质音乐资源。无论你是音乐爱好者、开发者还是普通用户,都能通过这个工具实现**音乐资源自由获取**,告别平台限制,打造专属的音乐世界。 ## 🎵 音乐收藏的三大痛点与破解之道 ### 痛点一:心爱歌曲无法下载保存 你

gitblog_00389的博客 457

navi 的 Vim 语法高亮:为 Cheatsheet 文件配置 navi.vim 高亮规则实战指南

navi 是一款交互式命令行 Cheatsheet 工具,其 `.cheat` / `.cheat.md` 文件本身拥有约定式语法(`%`、`#`、`;`、`$`、`@` 等前缀行)。本文以仓库文档 [docs/widgets/howto/VIM.md](https://link.gitcode.com/i/eeaf728b8fdbf2fd8166a8fbfabe9e3d) 为核心,讲解如何在 V

gitblog_00734的博客 339

3分钟掌握云音乐歌词提取:网易云QQ音乐歌词处理全攻略

还在为找不到心爱歌曲的歌词而烦恼吗?网易云QQ音乐歌词提取工具就是你的救星!这款开源工具能帮你从网易云音乐和QQ音乐两大平台智能获取歌词,无论是单曲精准提取还是批量智能匹配,都能在几分钟内搞定。作为一款专业的歌词获取工具,它支持LRC格式歌词下载、多语言翻译和批量处理,让音乐欣赏体验更加完整。无论你是音乐爱好者、外语学习者还是KTV爱好者,这款工具都能大大提升你的音乐体验效率。 ## 🚀 为什

gitblog_00596的博客 686
上一篇: 数据库差异(oracle mysql sqlserver )记录
下一篇: js取得iframe中的表单的表单值
smartfirstme
博客等级 码龄18年 1粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值