对比了几家大厂的音乐API的接口 这家相对规范些
现在开始从零开始 net6敏捷开发对接 入库吧
关键技术工具和思维
- 1 json 生成类
- 2 分析类 规划表设计
- 3 sqlsuger codefirst 生成表
- 4 封装get post 连接
- 5 类映射automapper
- 6 sqlsuger 插入数据
1 json 生成类
宇宙 第 一的编辑器生成 相应的类
cs
using miniAPI.Model;
namespace miniAPI.Models
{
public class QQtoplistDTO
{
public class DataQQtoplistDTO
{
public List<Toplist> topList { get; set; }
}
public class Toplist
{
public DateTime CreateDate { get; set; }
public int id { get; set; }
public int listenCount { get; set; }
public string picUrl { get; set; }
public List<TopSonglist> songList { get; set; }
public string topTitle { get; set; }
public int type { get; set; }
}
//public class Songlist
//{
// public string singername { get; set; }
// public string songname { get; set; }
//}
}
public class Outputpara<T>
{
private int _code = 500;
public int code
{
get { return _code; }
set { _code = value; }
}
public int subcode { get; set; }
private string _msg = "";
public string msg
{
get { return _msg; }
set { _msg = value; }
}
public string message { get; set; }
public int _default { get; set; }
//public Data data { get; set; }
public T data { get; set; }
}
}
2 分析类 规划表设计
排行榜单 维度和songlist的明细
3 codefirst 生成表
sqlsuger 爽得不要不要的
4 封装get post 连接
使用 httpClientFactory
cs
{
private IHttpClientFactory _httpClientFactory;
private readonly Cachelper _cachelper;
private readonly IMapper _mapper;
public MusicApibyqqController(IMapper mapper, IHttpClientFactory httpClientFactory, Cachelper cachelper)
{
_mapper = mapper;
_httpClientFactory = httpClientFactory;
_cachelper = cachelper;
}
[HttpGet]
[Route("createmusicapibyqq")]
public async Task<string> CreateMusicApibyqqIndex()
{
var client = _httpClientFactory.CreateClient();
var param = new { };
string jsonData = System.Text.Json.JsonSerializer.Serialize(param);
StringContent paramContent = new StringContent(jsonData);
var logOutResponse = await client.GetAsync(url);
string resultStr = await logOutResponse.Content.ReadAsStringAsync();
Outputpara<DataQQtoplistDTO> response = System.Text.Json.JsonSerializer.Deserialize<Outputpara<DataQQtoplistDTO>>(resultStr);
Console.WriteLine($"url:{url}, 成功");
}
else
{
Console.WriteLine($"url:{url}, 失败");
}
};
return "同步完毕 toplist:" + listToplist.Count+ " TopSonglist:"+ listTopSonglist.Count;
}
5 类映射automapper
cs
using AutoMapper;
using miniAPI.Model;
using static miniAPI.Models.QQtoplistDTO;
namespace miniAPI.Config
{
/// <summary>
/// Dto的映射配置
/// </summary>
public class AutoMapperConfigs : Profile
{
public AutoMapperConfigs()
{
//从 Toplist=》 TopMusiclist
CreateMap<Toplist, TopMusiclist>();
}
}
}
注册
cs
//Automapper映射
builder.Services.AddAutoMapper(typeof(AutoMapperConfigs));
映射 使用
_mapper.Map(temptoplist, tempTopMusiclist);
6 插入数据
cs
foreach (var temptoplist in response?.data?.topList)
{
TopMusiclist tempTopMusiclist = new TopMusiclist();
_mapper.Map(temptoplist, tempTopMusiclist);
tempTopMusiclist.CreateDate = DateTime.Now;
tempTopMusiclist.codeid = temptoplist.id;
listToplist.Add(tempTopMusiclist);
foreach (var tempsongList in temptoplist.songList)
{
tempsongList.codeid=temptoplist.id;
listTopSonglist.Add(tempsongList);
}
}
SqlSugarHelper.addtoplist(listToplist);
SqlSugarHelper.addtopSonglist(listTopSonglist);
cs
Db.Insertable(listToplist).ExecuteCommand();
开始使用数据吧 据说API不能商用 QAQ 但放出来干啥QAQ