master
嘉祥 詹 2024-06-13 18:25:24 +08:00
parent 9f2f0de5c0
commit 949bfcf38f
6 changed files with 161 additions and 110 deletions

View File

@ -77,11 +77,11 @@ public class authToken
user_perm = GlobalClass.appsettings("Admin:perm");
user_isLogin = true;
int intMin = 20;
int intMin = 180;
if (tokenItem.token_isremember == "Y")
{
intMin = 60 * 24 * 7;
intMin = 60 * 24 * 14;
}
dbConn.sqlConnection().Execute("update token set token_expireddate = @token_expireddate " +

View File

@ -29,7 +29,7 @@ public class youtubeUpdateClass : IHostedService, IDisposable
{
_timer = new Timer(DoWork, null,
TimeSpan.Zero,
TimeSpan.FromSeconds(15 * 60));
TimeSpan.FromSeconds(60 * 60));
return Task.CompletedTask;
}
@ -104,113 +104,139 @@ public class youtubeUpdateClass : IHostedService, IDisposable
}
}
dynamic youtubePlaylistObj;
youtubePlaylistObj = JsonConvert.DeserializeObject(youtubePlaylistJson);
string videoIdList = "";
foreach (var item in youtubePlaylistObj.items) {
videoIdList += item.snippet.resourceId.videoId + ",";
}
videoIdList = videoIdList.TrimEnd(',');
if (videoIdList == "")
try
{
updateLog failedLog = new updateLog();
failedLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Google Youtube Data Api 的Video數量 回傳0個!";
failedLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid;
failedLog.updateLog_kolMedia_accountName = mediaItem.kolMedia_accountName;
failedLog.updateLog_kolMedia_displayName = mediaItem.kolMedia_displayName;
failedLog.updateLog_kol_uid = mediaItem.kol_uid;
failedLog.updateLog_type = "YouTube";
failedLog.updateLog_result = "failed";
dynamic youtubePlaylistObj;
youtubePlaylistObj = JsonConvert.DeserializeObject(youtubePlaylistJson);
string videoIdList = "";
conn.Insert(failedLog);
}
else
{
string youtubeVideoApi = "https://www.googleapis.com/youtube/v3/videos?part=statistics,snippet&key=" + GlobalClass.appsettings("GoogleKey") + "&id=" + videoIdList;
string youtubeVideoJson = "";
using (var httpClient = new HttpClient())
foreach (var item in youtubePlaylistObj.items)
{
using (var response = await httpClient.GetAsync(youtubeVideoApi))
{
youtubeVideoJson = await response.Content.ReadAsStringAsync();
}
videoIdList += item.snippet.resourceId.videoId + ",";
}
dynamic youtubeVideoObj;
youtubeVideoObj = JsonConvert.DeserializeObject(youtubeVideoJson);
int totalViewNum = 0;
int videosNum = 0;
List<youtubeDetail> youtubeDetailList = new List<youtubeDetail>();
videoIdList = videoIdList.TrimEnd(',');
foreach (var item in youtubeVideoObj.items) {
if (videoIdList == "")
{
updateLog failedLog = new updateLog();
failedLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Google Youtube Data Api 的Video數量 回傳0個!";
failedLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid;
failedLog.updateLog_kolMedia_accountName = mediaItem.kolMedia_accountName;
failedLog.updateLog_kolMedia_displayName = mediaItem.kolMedia_displayName;
failedLog.updateLog_kol_uid = mediaItem.kol_uid;
failedLog.updateLog_type = "YouTube";
failedLog.updateLog_result = "failed";
try {
totalViewNum += (int)item.statistics.viewCount;
videosNum++;
youtubeDetail objDetail = new youtubeDetail();
objDetail.youtube_uid = youtube_uid;
objDetail.youtubeDetail_uid = "ytd_" + GlobalClass.CreateRandomCode(16);
objDetail.youtubeDetail_title = item.snippet.title;
objDetail.youtubeDetail_description = item.snippet.description;
conn.Insert(failedLog);
}
else
{
string youtubeVideoApi = "https://www.googleapis.com/youtube/v3/videos?part=statistics,snippet&key=" + GlobalClass.appsettings("GoogleKey") + "&id=" + videoIdList;
string youtubeVideoJson = "";
string publishedAt = item.snippet.publishedAt;
var published = DateTime.Parse(publishedAt, null, DateTimeStyles.None);
objDetail.youtubeDetail_publishedAt = published;
objDetail.youtubeDetail_commentCount = (int)item.statistics.commentCount;
objDetail.youtubeDetail_viewCount = (int)item.statistics.viewCount;
objDetail.youtubeDetail_likeCount = (int)item.statistics.likeCount;
objDetail.youtubeDetail_favoriteCount = (int)item.statistics.favoriteCount;
try {
objDetail.youtubeDetail_thumbnails = item.snippet.thumbnails.maxres.url;
using (var httpClient = new HttpClient())
{
using (var response = await httpClient.GetAsync(youtubeVideoApi))
{
youtubeVideoJson = await response.Content.ReadAsStringAsync();
}
catch { objDetail.youtubeDetail_thumbnails = ""; }
objDetail.youtubeDetail_videoId = item.id;
objDetail.youtubeDetail_json = JsonConvert.SerializeObject(item);
youtubeDetailList.Add(objDetail);
} catch (Exception ex)
{
}
dynamic youtubeVideoObj;
youtubeVideoObj = JsonConvert.DeserializeObject(youtubeVideoJson);
int totalViewNum = 0;
int videosNum = 0;
List<youtubeDetail> youtubeDetailList = new List<youtubeDetail>();
foreach (var item in youtubeVideoObj.items)
{
try
{
totalViewNum += (int)item.statistics.viewCount;
videosNum++;
youtubeDetail objDetail = new youtubeDetail();
objDetail.youtube_uid = youtube_uid;
objDetail.youtubeDetail_uid = "ytd_" + GlobalClass.CreateRandomCode(16);
objDetail.youtubeDetail_title = item.snippet.title;
objDetail.youtubeDetail_description = item.snippet.description;
string publishedAt = item.snippet.publishedAt;
var published = DateTime.Parse(publishedAt, null, DateTimeStyles.None);
objDetail.youtubeDetail_publishedAt = published;
objDetail.youtubeDetail_commentCount = (int)item.statistics.commentCount;
objDetail.youtubeDetail_viewCount = (int)item.statistics.viewCount;
objDetail.youtubeDetail_likeCount = (int)item.statistics.likeCount;
objDetail.youtubeDetail_favoriteCount = (int)item.statistics.favoriteCount;
try
{
objDetail.youtubeDetail_thumbnails = item.snippet.thumbnails.maxres.url;
}
catch { objDetail.youtubeDetail_thumbnails = ""; }
objDetail.youtubeDetail_videoId = item.id;
objDetail.youtubeDetail_json = JsonConvert.SerializeObject(item);
youtubeDetailList.Add(objDetail);
}
catch (Exception ex)
{
}
}
double avg = ((totalViewNum / videosNum) + 0.5);
newYoutube.youtube_avgViewCount = (int)System.Math.Floor(avg);
//conn.Execute("update youtube set youtube_revoke = 'Y' where kol_uid = @kol_uid and kolMedia_uid = @kolMedia_uid", new { kol_uid = mediaItem.kol_uid, kolMedia_uid = mediaItem.kolMedia_uid });
conn.Execute("update youtube set youtube_revoke = 'Y' where kol_uid = @kol_uid ", new { kol_uid = mediaItem.kol_uid });
conn.Insert(youtubeDetailList);
conn.Insert(newYoutube);
}
double avg = ((totalViewNum / videosNum) + 0.5);
newYoutube.youtube_avgViewCount = (int)System.Math.Floor(avg);
updateLog successLog = new updateLog();
successLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Youtube資料更新成功";
successLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid;
successLog.updateLog_kolMedia_accountName = mediaItem.kolMedia_accountName;
successLog.updateLog_kolMedia_displayName = mediaItem.kolMedia_displayName;
successLog.updateLog_kol_uid = mediaItem.kol_uid;
successLog.updateLog_type = "YouTube";
successLog.updateLog_result = "success";
successLog.updateLog_uid = channel_id;
conn.Execute("update youtube set youtube_revoke = 'Y' where kol_uid = @kol_uid and kolMedia_uid = @kolMedia_uid", new { kol_uid = mediaItem.kol_uid, kolMedia_uid = mediaItem.kolMedia_uid });
conn.Insert(youtubeDetailList);
conn.Insert(newYoutube);
conn.Insert(successLog);
}
catch (Exception ex) {
updateLog successLog = new updateLog();
successLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Youtube資料更新失敗,失敗原因 " + ex.Message;
successLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid;
successLog.updateLog_kolMedia_accountName = mediaItem.kolMedia_accountName;
successLog.updateLog_kolMedia_displayName = mediaItem.kolMedia_displayName;
successLog.updateLog_kol_uid = mediaItem.kol_uid;
successLog.updateLog_type = "YouTube";
successLog.updateLog_result = "failed";
successLog.updateLog_uid = channel_id;
conn.Insert(successLog);
}
updateLog successLog = new updateLog();
successLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Youtube資料更新成功";
successLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid;
successLog.updateLog_kolMedia_accountName = mediaItem.kolMedia_accountName;
successLog.updateLog_kolMedia_displayName = mediaItem.kolMedia_displayName;
successLog.updateLog_kol_uid = mediaItem.kol_uid;
successLog.updateLog_type = "YouTube";
successLog.updateLog_result = "success";
successLog.updateLog_uid = channel_id;
conn.Insert(successLog);
}
else {
updateLog failedLog = new updateLog();

View File

@ -1,21 +1,15 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59933",
"sslPort": 44377
}
},
{
"profiles": {
"Journeys_WantHome": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7111;http://localhost:5223",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"dotnetRunMessages": true,
"applicationUrl": "https://localhost:7111;http://localhost:5223",
"nativeDebugging": false,
"sqlDebugging": false
},
"IIS Express": {
"commandName": "IISExpress",
@ -23,6 +17,24 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WSL": {
"commandName": "WSL2",
"launchBrowser": true,
"launchUrl": "https://localhost:7111",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:7111;http://localhost:5223"
},
"distributionName": ""
}
},
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59933",
"sslPort": 44377
}
}
}
}

View File

@ -319,20 +319,20 @@
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="kolMedia_url" class="form-control" value="" placeholder="網址" maxlength="50" required=""> <label for="kolMedia_url">網址</label>
<input type="text" id="kolMedia_url" class="form-control" value="" placeholder="網址" maxlength="80" required=""> <label for="kolMedia_url">網址</label>
</div>
</div><!-- /.form-group -->
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="kolMedia_accountName" class="form-control" value="" placeholder="社群帳號" maxlength="20" required=""> <label for="kolMedia_accountName">社群帳號</label>
<input type="text" id="kolMedia_accountName" class="form-control" value="" placeholder="社群帳號" maxlength="30" required=""> <label for="kolMedia_accountName">社群帳號</label>
</div>
</div><!-- /.form-group -->
<!-- .form-group -->
<div class="form-group">
<div class="form-label-group">
<input type="text" id="kolMedia_displayName" class="form-control" value="" placeholder="社群名稱" maxlength="20" required=""> <label for="kolMedia_displayName">社群名稱</label>
<input type="text" id="kolMedia_displayName" class="form-control" value="" placeholder="社群名稱" maxlength="30" required=""> <label for="kolMedia_displayName">社群名稱</label>
</div>
</div><!-- /.form-group -->
<!-- .form-group -->

View File

@ -63,7 +63,7 @@ $(document).ready(function () {
var mediaArray = [];
var tags = $('#kol_tags').val();
var tagsStr = "";
var err_msg = "";
var src = $('#fileupload-avatar').parent().children('img').prop('src');
var origin = location.origin;
src = src.replace(origin, '');
@ -98,17 +98,30 @@ $(document).ready(function () {
kolMedia_fansNum: RemoveComma($(this).find('td').eq(4).text().trim())
}
kolMedia_accountName = $(this).find('td').eq(2).text().trim();
kolMedia_url22 = $(this).find('td').eq(1).text().trim();
if ($(this).find('td').eq(0).text().trim() == 'YouTube') {
if (kolMedia_accountName.substring(0, 1) != '@') {
err_msg += $(this).find('td').eq(3).text().trim() + " 此YouTube頻道資料有誤YouTube的帳號名稱第一碼應該為@字元\n";
}
if (kolMedia_url22.indexOf("youtube") >= 0) {
err_msg += kolMedia_url22 + " 此Youtube網址有誤\n";
}
}
if ($(this).find('td').eq(0).text().trim() == 'Facebook') {
if (kolMedia_url22.substring(0, 4) != 'http') {
err_msg += $(this).find('td').eq(3).text().trim() + " 此Facebook網址有誤\n";
}
}
mediaArray.push(item);
});
var err_msg = "";
if (kol_name == "") {
err_msg += "KOL頻道名稱未填!\n";

View File

@ -354,7 +354,7 @@ $(document).ready(function () {
checkboxClick(this);
});
},
order: [[5, 'desc']],
order: [[1, 'desc']],
info: true,
search: "搜尋:",
searching: true,