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_perm = GlobalClass.appsettings("Admin:perm");
user_isLogin = true; user_isLogin = true;
int intMin = 20; int intMin = 180;
if (tokenItem.token_isremember == "Y") if (tokenItem.token_isremember == "Y")
{ {
intMin = 60 * 24 * 7; intMin = 60 * 24 * 14;
} }
dbConn.sqlConnection().Execute("update token set token_expireddate = @token_expireddate " + 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, _timer = new Timer(DoWork, null,
TimeSpan.Zero, TimeSpan.Zero,
TimeSpan.FromSeconds(15 * 60)); TimeSpan.FromSeconds(60 * 60));
return Task.CompletedTask; 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) { try
videoIdList += item.snippet.resourceId.videoId + ",";
}
videoIdList = videoIdList.TrimEnd(',');
if (videoIdList == "")
{ {
updateLog failedLog = new updateLog(); dynamic youtubePlaylistObj;
failedLog.updateLog_text = "此Youtube帳號 " + mediaItem.kolMedia_accountName + "(" + mediaItem.kolMedia_displayName + ") Google Youtube Data Api 的Video數量 回傳0個!"; youtubePlaylistObj = JsonConvert.DeserializeObject(youtubePlaylistJson);
failedLog.updateLog_kolMedia_uid = mediaItem.kolMedia_uid; string videoIdList = "";
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";
conn.Insert(failedLog); foreach (var item in youtubePlaylistObj.items)
}
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())
{ {
using (var response = await httpClient.GetAsync(youtubeVideoApi)) videoIdList += item.snippet.resourceId.videoId + ",";
{
youtubeVideoJson = await response.Content.ReadAsStringAsync();
}
} }
dynamic youtubeVideoObj; videoIdList = videoIdList.TrimEnd(',');
youtubeVideoObj = JsonConvert.DeserializeObject(youtubeVideoJson);
int totalViewNum = 0;
int videosNum = 0;
List<youtubeDetail> youtubeDetailList = new List<youtubeDetail>();
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 { conn.Insert(failedLog);
totalViewNum += (int)item.statistics.viewCount; }
videosNum++; else
youtubeDetail objDetail = new youtubeDetail(); {
objDetail.youtube_uid = youtube_uid; string youtubeVideoApi = "https://www.googleapis.com/youtube/v3/videos?part=statistics,snippet&key=" + GlobalClass.appsettings("GoogleKey") + "&id=" + videoIdList;
objDetail.youtubeDetail_uid = "ytd_" + GlobalClass.CreateRandomCode(16); string youtubeVideoJson = "";
objDetail.youtubeDetail_title = item.snippet.title;
objDetail.youtubeDetail_description = item.snippet.description;
string publishedAt = item.snippet.publishedAt; using (var httpClient = new HttpClient())
{
var published = DateTime.Parse(publishedAt, null, DateTimeStyles.None); using (var response = await httpClient.GetAsync(youtubeVideoApi))
{
objDetail.youtubeDetail_publishedAt = published; youtubeVideoJson = await response.Content.ReadAsStringAsync();
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)
{
} }
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(successLog);
}
conn.Insert(youtubeDetailList); catch (Exception ex) {
conn.Insert(newYoutube); 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 { else {
updateLog failedLog = new updateLog(); updateLog failedLog = new updateLog();

View File

@ -1,21 +1,15 @@
{ {
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59933",
"sslPort": 44377
}
},
"profiles": { "profiles": {
"Journeys_WantHome": { "Journeys_WantHome": {
"commandName": "Project", "commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true, "launchBrowser": true,
"applicationUrl": "https://localhost:7111;http://localhost:5223",
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
} },
"dotnetRunMessages": true,
"applicationUrl": "https://localhost:7111;http://localhost:5223",
"nativeDebugging": false,
"sqlDebugging": false
}, },
"IIS Express": { "IIS Express": {
"commandName": "IISExpress", "commandName": "IISExpress",
@ -23,6 +17,24 @@
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "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 --> <!-- .form-group -->
<div class="form-group"> <div class="form-group">
<div class="form-label-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>
</div><!-- /.form-group --> </div><!-- /.form-group -->
<!-- .form-group --> <!-- .form-group -->
<div class="form-group"> <div class="form-group">
<div class="form-label-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>
</div><!-- /.form-group --> </div><!-- /.form-group -->
<!-- .form-group --> <!-- .form-group -->
<div class="form-group"> <div class="form-group">
<div class="form-label-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>
</div><!-- /.form-group --> </div><!-- /.form-group -->
<!-- .form-group --> <!-- .form-group -->

View File

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

View File

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