文章

Facebook 取得粉絲頁資訊整理

圖片
前言    工作需求,需要取得自家粉絲頁的影片資訊。這幾天的搜尋及研究後,頭腦有點亂,整理一下相關內容及連結。
Token 區分 User Access Token:最常用的一種,讀寫用戶的Facebook資料,透過 login dialog經過用戶授權取得 App Access Token : 用來更改你的app設定或是發佈一些消息,透過server對facebook呼叫取得 Page Access Token : 跟User access token很像,但是它可以讀寫Facebook page的資料 Client Token:封裝在mobile apps或是桌面程式 參考: https://ithelp.ithome.com.tw/articles/10158130
取得粉絲頁影片資訊 取得粉絲頁的影片清單 需要Page Id,管理者在粉絲頁管理的"關於"可以取得。 需要權限:pages_read_engagement 內嵌影片播放器 API 事件控制 影片與直播是不同的API
Token 取得-使用工具 透過工具取得短期Token 個人、Page都可以 透過 Debuger可以換成三個月的Long Token 90天過期,若有使用則會繼續展延,若沒使用60天就會過期。 過期的token不可再拿來換新的。 可以透過API取得short-token,再去換long-token。 未過期的也可以使用long-token,換另一個long-token回來。
Token 取得-使用API 透過Fb API Client 取得短期Token 更換成長期Token及Page Token 需要App Id及App Secret 我的作法是換成長期Token後,再把它換成Page Token。ps:期限是永久的....不知什麼時時會失效。 pages_read_engagement:取得影片的權限Developer Mode下,可以直接使用 在Live Mode下,需要App Review相關權限。 申請權限,需要附上你的應用程式的操作畫面及影片 要通過個人或商業審核。 個人審核現在暫停中(已停4個月了)
App 啟用Live基本條件


相關參考 透過Fb API Client 取得短期Token 使用App Id,Secret更換成長期Token及Page Token Facebook api - 手動建立登入流程 Faceb…

ASP.NET MVC-Google Authenticator雙因素認證實作

圖片
前言
雙因素認證,除了Email及簡訊以外,另一選擇Google Authenticator。本文針對在ASP.NET MVC實作方式作說明。
實作
1.安裝動態密碼及QRCode套件
2.產生動態密碼的私鑰及BarcodeUrl       private GoogleAuthenticatorModel GenerateGoogleAuthenticatorModel()         {             byte[] secretByte = KeyGeneration.GenerateRandomKey(20);             string userName = "Kimxinfo";             string barcodeUrl = KeyUrl.GetTotpUrl(secretByte, userName) +  "&issuer=GoogleAuthenticatorLab";             var model = new GoogleAuthenticatorModel             {                 SecretKey = Base32Encoder.Encode(secretByte),                 BarcodeUrl = barcodeUrl             };             return model;         }
3.產生Barcode圖檔   private string GenerateQRCode(GoogleAuthenticatorModel model)         {             string fileUrl = $"~/temp/{model.SecretKey}.jpg";             string filePath = Server.MapPath(fileUrl);             QRCodeGenerator.ECCLevel eccLevel = QRCodeGenerator.ECCLevel.M;             using (QRCodeGenerator qrGenerator = new QRCodeGenerato…

Angular自訂後端Route

圖片
前言
原本開發的.Net Core程式,想要跟Angular並存,例如:路徑/kim開頭為Angular App,其他則使用MVC。
開發環境 Visual Studio 2019 .Net core 3.1 Angular 9
解決方式
修改Starup.cs,將原本的app.UseSpa 註解或移除        //app.UseSpa(spa =>             //{             //    // To learn more about options for serving an Angular SPA from  ASP.NET Core,             //    // see https://go.microsoft.com/fwlink/?linkid=864501             //    spa.Options.SourcePath = "ClientApp";             //    if (env.IsDevelopment())             //    {             //        spa.UseAngularCliServer(npmScript: "start");             //    }             //});
加入自訂Angular進入的Route,本例為 kim。 public-host:For Live Reload使用         app.Map("/kim", client =>             {                 client.UseSpa(spa =>                 {                     spa.Options.SourcePath = "ClientApp";                     if (env.IsDevelopment())                     {     //開發時期,需要指定base-href為kim    spa.UseAngularCliServer(npmScript: "start --   --base-href=/kim/ -…

Jenkins-備份鎖定錯誤

圖片
問題 公司的Jenkins,原本可以正常備份,但這幾天備份出現錯誤,如下訊息: [ERROR] org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file org.jvnet.hudson.plugins.backup.BackupException: java.io.IOException: org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file         at org.jvnet.hudson.plugins.backup.utils.BackupEngine.doBackup(BackupEngine.java:115)         at org.jvnet.hudson.plugins.backup.utils.BackupTask.run(BackupTask.java:130)         at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: org.codehaus.plexus.archiver.ArchiverException: Problem creating zip: The process cannot access the file because another process has locked a portion of the file         at org.jvnet.hudson.plugins.backup.utils.BackupEngine.handleEnd(BackupEngine.java:104)         at org.apache.commons.io.DirectoryWalker.w…

WIX-建立URL註冊碼U啟動程式

圖片
前言    此篇今天在測試Notion筆記的桌面應用程式,針對在登入時,透過網頁啟動應用程式這個功能,感到有點好奇。雖然這不是很新奇的功能,幾年前就在iTune上看過,只是自己 寫的程式,都沒試著去作此功能。
實作
開始前,依照微軟提供的說明,我們需註冊URL相關機碼,reg範例檔案內容如下: [HKEY_CLASSES_ROOT\WixLab] @="URL:WixLab Protocol" "URL Protocol"=""
[HKEY_CLASSES_ROOT\kai\DefaultIcon] @="C:\\Program Files (x86)\\WixLab.WpfApp\\WpfApp.exe"
[HKEY_CLASSES_ROOT\WixLab\shell] @=""
[HKEY_CLASSES_ROOT\WixLab\shell\open] @=""
[HKEY_CLASSES_ROOT\WixLab\shell\open\command] @="C:\\Program Files (x86)\\WixLab.WpfApp\\WpfApp.exe /url \"%1\""
根據上方的機碼內容,在安裝程式時,將內容註冊進去。本範例使用Wix安裝範本作說明(關於Wix請參考)。 打開Product.wxs,新增一筆Component如下,紅字WixLab為Url Schema開頭。
    <!-- 註冊URL執行的機碼-->       <Component Id="RunURLComponent" Guid="*">         <RegistryKey Root="HKCR" Key="WixLab" >           <RegistryValue Type="string" Name="URL Protocol" Value=""/>           <RegistryValue Type="string"…

刪除Docker資料夾中的windowsfilter目錄

圖片
前言 之前在測試Docker for Windows時,下載了不少Image檔案在我的E槽內,大約有30G左右。今天因硬碟不足,想要來清掉它,但卻出現權限不足,無法刪除的訊息。另一點,很怪的是,Image目錄已經指向其他位置了,都已經沒用到了,也不能刪。

解決方式 下載檔案 https://github.com/jhowardmsft/docker-ci-zap 解壓後,使用管理者權限執行command 如下,就可以完全刪除該目錄 docker-ci-zap.exe -folder "E:\Hyper-V\Docker\windowsfilter"
其它參考 http://edwardkuo.github.io/paper/2017/03/10/Docker/Deletewindowsfilter/

Visual Studio Angular 8 升級到9

圖片
前言   這兩天在學習Angular,對於習慣使用Visual Studio 2019的我,使用Angular專案樣板,當然是最好的選擇了,可以省一下一些.Net Core與Angular的一些配置工夫。

建立好專案後,查看package.json的Angular版本為8.2.12,最新的版本為9.x.x。嗯...看到有新版本後,強迫症發作,順手就下了升級命令,結果代誌不是憨人想的那麼簡單,升級後的程式, 無法執行,最後還是得依靠google大神解決....=.=。
升級方式   環境條件 .Net Core 3.1 Node.js 10.13
命令模式,切到ClientApp目錄 1.先升級到 8 的最後版本 ng update @angular/core@8 @angular/cli@8
2.再升級到 9 ng update @angular/core@9 @angular/cli@9
3.打開main.ts,移除程式如下: export { renderModule, renderModuleFactory } from '@angular/platform-server';
4.打開package.json,修改"start: 原 "start": "ng serve", 修改後 "start": "echo Starting... && ng serve",
以上....收工。
其它參考 https://jasontaylor.dev/asp-net-core-angular-9-upgrade/

NSwag Studio 產生API的Client介接程式碼

圖片
前言    一直以來在寫Web API時,給同事參考都是透過Swagger產生的說明文件。如下圖使用Swashbuckle 套件產生。
專案環境 .Net Framework 4.8 ASP.NET Web API 2 ASP.NET MVC  跟API 取資料,作展示。
問題    同事詢問是否可以直接提供介接類別,讓他直接可以使用。例如:Google API SDK。這...若要手刻的話,可能會累屬偶,幸好科技發達,關於這方面,早已有相關的解決方法。

如何使用 1. Web API 安裝NSwag
安裝Nuget package NSwag.AspNet.Owin Microsoft.AspNet.WebApi.Owin Microsoft.Owin.Host.SystemWeb ps: 關於為什麼不用Swashbuckle,請參考此篇
在Web API專案新增Startup.cs [assembly: OwinStartup(typeof(NSwagLab.Startup))] namespace NSwagLab {     public class Startup     {         public void Configuration(IAppBuilder app)         {             var config = new HttpConfiguration();             app.UseSwaggerUi3(typeof(Startup).Assembly, settings =>             {                 //針對RPC-Style WebAPI,指定路由包含Action名稱                 settings.GeneratorSettings.DefaultUrlTemplate =                     "api/{controller}/{action}/{id?}";                 //可加入客製化調整邏輯                 settings.PostProcess = document =>                 {                     docum…

AzureDevOps-使用Azure Artifacts建立私有的Nuget來源

圖片
前言
同事前兩天問到AzureDevOps 的Artifacts可以用來管理私有nuget套件,但..沒什麼研究,無法回答=.=。今日找到一篇教學文章,跟著作一次,,並將相關步驟記錄下來。
如何使用
1.建立Feed
2.設定Feed  3.選擇nuget.exe

4.將上圖紅框內的xml另存成Nuget.config,並下載最新的Nuget.exe放到方案目錄內。
ps:要放哪都可以,放在方案目錄內,是個人開發習慣。
5.透過nuget.exe封裝套件

進入PowerShell後,先切換目錄到.nuget目錄,nuget.exe及組態檔所在位置。

.\nuget.exe pack ..\AzureArtifactsLab\AzureArtifactsLab.csproj
封裝後會產出 AzureArtifactsLab.1.0.0.nupkg,版號自動參照AssemblyInfo.cs

6.發行nuget .\nuget.exe push -source "KimFeedLab" -ApiKey az AzureArtifactsLab.1.0.0.0.nupkg 執行後,第一次會先跳出登入畫面


發行完畢,回到Azure Devops會看到已發佈的套件
7.在開發工具的Nuget Package Sources加入新的來源 ps: 來源的URL在第3點建立的Nuget.config內。
完成後,就可以在套件管理參考囉

其它參考 範例下載 https://azuredevopslabs.com/labs/azuredevops/packagemanagement/#exercise-1-working-with-azure-artifacts https://www.nuget.org/downloads

Jenkins-升上2.223的安全性問題解決

圖片
問題
1.同事回報在Jenkins的操作出現錯誤,訊息如下:
No valid crumb was included in the requestSERVLET
2.AzureDevOps的push trigger無法觸發,發生403錯誤。
以上發生是在Jenkins 版本升上 2.223所遇到問題。
解決方式
1.在防止跨站點請求偽造的設定,將代理相容性打勾。
此問題發生在公司的測試主機上,正式主機無此問題。在搜尋相關文章後,方向往安全性設定尋找,比對了2台主機的設定後,找到了差異的地方,設定後,回復正常。

ps:此設定原本是Prevent Cross Site Request Forgery exploits,之前為了讓第三方網站呼叫,把它停用。更新最新版後,Enable proxy compatibility 就變成是未勾選狀態。

2.第三方網站呼叫Jenkins要改用toke的驗證。原本使用的是帳號/密碼的方式,會出現403錯誤。
建立token,進入位置:http://localhost:8080/user/[你的帳號]/configure。 紅框的token,建立後只會顯示一次,代替原本使用的密碼。
更新AzureDevOps 的User API token,輸入將剛在Jenkins建立的token。

其它參考 https://blog.csdn.net/wanglin_lin/article/details/73849146 https://jenkins.io/doc/upgrade-guide/2.176/#upgrading-to-jenkins-lts-2-176-3