[TIL][Golang] Golang 社群 FAQ (1) - Type Assertion

前言:

平常在臉書社群或是 Slack channel (https://t.me/golangtw) 都會聽到一些常問的問題,決定把它整理一下,變成這篇文章,也希望讓更多人經過搜尋來了解與得到解答。 由於經常詢問的問題還不少,這算是一個系列的整理,希望能透過整理成文章的方式給予大家比較深入的了解。

第一篇首先是 Type Assertion ,希望大家在型別轉換上能夠更了解。

相關系列文章整理:

Type Assertion:

範例程式碼: https://play.golang.org/p/Ya8tVYmdpko

不好意思

想請問這一段

resp, ok := datum.(*module.Response)

那個ok是代表甚麼意思啊

是代表datum這個interface可以成功轉成Request 這個struct的意思嗎? 

這種用法叫做 Type Assertion (Go Tour 有相關說明),主要是用來做轉型判斷。透過 Type Assertion 主要的好處可以確認是否可以正確的轉型成功。

當然 reflect 也可以轉換數值,但是比較適合使用在當你拿到一個參數卻不知道當初是使用哪一種資料型態。才透過 reflect 套件來取得型態與取得數值內容。

簡單一點的例子而言:

func parseInterfceToString(in interface{}) string {
	if val, ok := in.(string); ok {
		return val
	}
	return ""
}

上面的例子,因為已經確定只支援 string 的解析方式,所以可以直接使用 type assertion 的方式來轉址。 但是很多時候,如果希望能夠支援多種型態,並且能夠正確的讀取數值的話,又該如何做呢?

func createQuery(q interface{}) {
	t := reflect.TypeOf(q)
	v := reflect.ValueOf(q)
	fmt.Println("Type ", t)
	fmt.Println("Value ", v)
}

這是一個相當簡單的 reflect 範例,可以讓妳得知輸入進來的資料型別與實際資料。 直接透過 reflect.Type.Kind() 來取得型別做處理的範例可以參考以下:

func examiner(t reflect.Type, depth int) {
	fmt.Println(strings.Repeat("\t", depth), "Type is", t.Name(), "and kind is", t.Kind())
	switch t.Kind() {
	case reflect.Array, reflect.Chan, reflect.Map, reflect.Ptr, reflect.Slice:
		fmt.Println(strings.Repeat("\t", depth+1), "Contained type:")
		examiner(t.Elem(), depth+1)
	case reflect.Struct:
		for i := 0; i < t.NumField(); i++ {
			f := t.Field(i)
			fmt.Println(strings.Repeat("\t", depth+1), "Field", i+1, "name is", f.Name, "type is", f.Type.Name(), "and kind is", f.Type.Kind())
			if f.Tag != "" {
				fmt.Println(strings.Repeat("\t", depth+2), "Tag is", f.Tag)
				fmt.Println(strings.Repeat("\t", depth+2), "tag1 is", f.Tag.Get("tag1"), "tag2 is", f.Tag.Get("tag2"))
			}
		}
	}
}

這個範例,根據不同型別 (array, channel, map ) 則繼續往裡面去解析,如果是 struct 就印出相關結構。

但是值得注意的是,如果需要真正把資料型態轉成該型態的話。還是得透過 type assertion 比較安全。不然透過 reflect.Value 取值得方式來做轉換,預設都是會 panic 。

結論:

如果只支援某些型態的處理,在轉換型別的處理上建議直接使用 type assertion 就可以輕鬆完成。如果想要處理更多型態的方式(slice, struct) 的處理跟轉型,可能就得透過 reflect 來慢慢處理。

也希望整理的相關資料能夠幫助大家。

Reference:

[LINE TAIWAN TECHPULSE 2019] 活動安排幕後秘辛

前言

大家好,我是 LINE Developer Relations 團隊的資深開發技術推廣工程師 - Evan Lin 。主要的工作項目就是平台技術推廣與技術品牌的建立與溝通。 LINE TAIWAN TECHPULSE 2019 已經在 2019/12/04 在和平籃球館舉辦了,不知道今年各位有沒有參與到這一場精心安排的盛會。 這一篇文章,分享一下身為幕後工作人員在活動裡面想要傳遞的訊息,本篇文章將會專注在主場議程以外的相關訊息,也就是開發者相關的交流區域。希望大家都有觀察到工作人員們的初衷,跟著本篇文章再來體驗這一場知識與社群的饗宴。

回歸初衷,從開發者的本質出發

開發者在參與研討會的時候,最想要的究竟是什麼? 就是跟人互動, 而 Closing the distance 一直都是 LINE 的宗旨之一,也是本次活動最大的設計目標。 於是本次的活動回歸了開發者社群的本質,參與研討會最想要做的但是由於一些外在條件而無法實現的夢想,大致上條列如下:

  • 講者們都好強喔,好希望能在台下跟講者互動跟交流,想聽聽他們對於其他部分的意見討論與問題交流。
  • LINE 的強大開發平台上面有哪些社群組織? 裡面該如何加入呢?
  • 什麼是 LAE (LINE API Expert) 這些大大又是哪裡來的? 可以跟他們交流問問題嗎?
  • LINE Pay 該如何申請測試帳號? 該如何分析問題呢?
  • LINE 的新星計畫又是什麼? 可以跟那些參與的新創團隊聊聊嗎?
  • 聽說 LINE 資安做得相當好,那有資安社群可以參加嗎?
  • 每次看到 LINE 的工程師在各大研討會的分享都好棒,有沒有機會可以跟他們近距離討論呢?
  • 有沒有機會能夠透過參與研討會認識更多的同好? 或是跟同行友人又更多拍照的機會?

這些的問題從去年活動舉辦之後,就有陸陸續續收到來賓們與社群朋友們的意見。 工作團隊仔細思考之後,推出了已開發者為本的活動主軸。

互動攤位: 讓你了解大神的機會

首先問了讓每個參與的人都有機會可以跟講者們面對面討論的機會,主辦單位這次提供了互動攤位。並且有五大主題攤位:

Ask LINER:

讓你跟講者,來自日本的 LINE 工程師面對面的交流與討論。台上聽不懂的,台下讓你問。 面板上面還清清楚楚地有著所有講者會待在攤位的時間,千萬不要錯過跟講者面對面的機會。

並且在中午時段還有來自於日本 Developer Relations 團隊的 Shoko Sato 與 Tachibana Sho 來分享日本 Developer Relations 的活動與一些有趣的日本服務。

LINE Pay:

行動支付已經是一大風潮,想要透過 LINE 官方帳號來創業的夥伴們,都希望可以快速的了解如何串接 LINE Pay ,這個攤位給你一個面對面的討論機會。

BECKS.io 社群攤位:

由 LINE 韓國同仁,亞洲傳奇資安大神 Beist 所組織的跨公司的資安社群 BECKS.io 這次也帶著相關資訊在此次的研討會之中擺攤。 其實 BECKS 今年在台灣也舉辦了五次的社群聚會,如果對資訊安全有興趣的朋友,可以追蹤社群活動首頁: https://becks.kktix.cc/

LAE (LINE API Expert) 互動攤位:

LAE (LINE API Expert) 自從在 2018 Q1 宣佈以來,台灣目前也有九位 LAE (可以去以下網址查詢所有的 LAE )。 經常大家都是遠遠地知道有這些 LAE 的存在,卻一直苦無機會能跟他們面對面的交流。 所以這次趁著 LINE TECHPULSE 的機會,也邀請了 LAE 一起來共襄盛舉。

LINE PROTOSTAR 互動攤位:

本屆 TECHPUSLE 也邀請到運用 LINE 平台打造應用的10家新創團隊,命題都非常實用有趣,可分為生活助手、娛樂、教育,與金融科技相關的應用。 這邊可以讓各位去一個一個了解每一個新創團隊如何透過 LINE 平台與聊天機器人來發展自己的事業,並且如何透過一些 Messaging API 來讓自己的相關事業能更加活躍。

展示架(Poster) : 跟 LINE 台灣服務工程師討論架構

此外,今年一共舉辦了四次的 LINE Developer Meetup ,並且有許多次的社群活動邀請到 LINE 台灣產品與工程團隊的開發夥伴來分享。 這些活動之中,也能感受到開發者們對於 LINE 的工程團隊其實充滿著好奇心,想要了解更多,不論是產品服務的架構,還是使用到的相關技術,或是團隊需要的相關技能。

所以我們這次也特定請到工程團隊們製作相關的服務架構或是團隊組成的相關展示架,並且歡迎大家來展示架攤位這裡直接跟工程團隊討論。

這次一共有十個展示架,其中有五個是產品團隊如下:

  • LINE SPOT
  • LINE MUSIC
  • LINE Travel
  • LINE Shopping
  • LINE Today

另外有五個是工程團隊與組織:

  • LINE Bank
  • LINE QA team
  • LINE Data Dev team
  • LINE UIT team
  • LINE Client team

希望這參與的朋友都當初都有好好的來了解每個團隊,並且也透過跟工程團隊的互動可以有更多的理解。

##相片牆(PhotoWall): 一起留下美好的回憶

「參與研討會最重要的不一定是議程本身,而是一起參與的開發者」

參與過一些的研討會,我總是這樣的鼓勵著同行友人或是同事們。因為不少的議程都會有投影片釋出,你都有機會可以在事後了解更多,但是研討會參與者也是最吸引人的地方。想想看由於 TECHPULSE 的原因,你是不是跟著某些同事一起來參加? 是不是遇到很久沒有見的朋友? 還是認識了第一次見面但是一樣從事 LINE Chatbot 的朋友?

相片牆是一個讓大家可以拍照留念的地方,一起來跟夥伴們一起拍照。 透過在官方帳號裡面的 Image Map 裡面的選項,會直接打開你的相機,讓你拍下照片後直接分享在「LINE 貼文串」之中。該照片就會被我們挑出來在大的相片牆上面投射出來。

活動當中,許多的參與者拉著好久不見得朋友一起來拍照。一起留下許多美好的回憶。

贈品與相關限量物品: 讓工程師更潮

這次的贈品也精心設計,特別找了一個帥氣的小背包讓每個工程師都可以帶去參加各種社群活動。讓各位的帥氣再也不是非主流。

並且下午三點多的餐點時間,主辦單位們也推出了限量(活動限定)特製的 TECHPULSE 啤酒讓每一位參與這可以心靈饗宴之外,也能夠與朋友盡情的享用啤酒。

LINE Developer Meetup #10:獨特招募場次

活動網址: https://linegroup.kktix.cc/events/20191204-10

每次的開發者小聚( LINE Developer Meetup ) 經常都會有一個狀況是許多的開發者包圍著 LINE 的工作團隊,想要了解開發團隊裡面所使用的工具,工作狀況,或是面臨的問題。這也是因為許多外部的開發者其實對於參與著 LINE 的工作團隊有著極大的興趣。 所以這次活動裡面,我們舉行了第二次的招募說明會,內容參考了 「2019 LINE Taiwan Developers Recruitment Day」

這場活動採分開討論與清場,讓每一個參與者可以去深入瞭解自己有興趣的工作團隊內容,並且可以面對面的跟可能是參與的面試主管們討論。

投影片集錦:

Talks 投影片集錦:

最後,大家對於今年的 LINE TECHPULSE 2019 是否意猶未盡?

快來看看相關的投影片,溫習一下許多嶄新的功能吧。

以下先分享主要 Talk 的部分:

  1. Keynote by Marco Chen:

https://speakerdeck.com/line_developers_tw/line-techpulse-2019-keynote

  1. LINE Platform API Update by Evan Lin

https://speakerdeck.com/line_developers_tw/techpulse-2019-line-platform-api-update

  1. AutoML in Clova Chatbot Builder Framework by Jaewon Lee / Penny Su

https://speakerdeck.com/line_developers_tw/automl-in-clova-chatbot-builder-framework

  1. How LINE Does Enterprise Security by Beist

https://speakerdeck.com/line_developers_tw/how-line-does-enterprise-security

  1. Timeline Post Recommender System by Jihong Lee

https://speakerdeck.com/line_developers_tw/timeline-post-recommender-system

  1. Protostar Program Introduction by Kevin Chen

https://speakerdeck.com/line_developers_tw/techpulse-2019-protostar-program-introduction

  1. LINE Pay - New Features of LINE Pay by Webber Su / Sabrina Lee

https://speakerdeck.com/line_developers_tw/line-pay-new-features-of-line-pay

  1. LINE SPOT and How We Build It by Julian Shen

https://speakerdeck.com/line_developers_tw/techpulse-2019-line-spot-and-how-we-build-it

更多資訊: https://techpulse.line.me/

閃電秀 (Lightning Talks) 投影片集錦:

閃電秀 (Lightning Talk) 一直以來都是技術研討會最精彩的部分之一。

不光是可以在很多的時間內聽到許多有趣的分享,更可以聽到許多精闢的技術分享與摘要。

這次要分享的就是 LINE TECHPULSE 2019 的閃電秀的部分,本次閃電秀分成三大主題,相關投影片依序如下:

  1. Lightning Talk - Data Pipeline and Data Processing
    1. https://speakerdeck.com/line_developers_tw/efficient-integrating-data-from-multiple-data-providers Efficient Integrating Data
 from Multiple Data Providers By Yumei Chen
    2. https://speakerdeck.com/line_developers_tw/how-machine-learning-helps-line-fact-checker How Machine Learning helps LINE Fact Checker BY Jim Horng
    3. https://speakerdeck.com/line_developers_tw/techpulse-2019-go-ing-graphql-in-line-spot-api-gateway-for-microservices Go-ing GraphQL in LINE SPOT API Gateway for Microservices BY Denny Tsai
  2. Lightning Talk - Data Science and Analytics
    1. https://speakerdeck.com/line_developers_tw/utilizing-embeddings-in-learning-to-rank-for-search Utilizing Embeddings In Learning To Rank For Search BY Shawn Tsai
    2. https://speakerdeck.com/line_developers_tw/analysis-of-line-music-in-taiwan Analysis of LINE MUSIC in Taiwan By Liwen Liao
    3. https://speakerdeck.com/line_developers_tw/toward-intelligent-music-service Toward Intelligent Music Service By Johnson Wu
  3. Lightning Talk - Client and Automation
    1. https://speakerdeck.com/line_developers_tw/flutter-for-app-development Fast UI/UX Prototyping W/ Flutter For App Development By Daniel Kao
    2. https://speakerdeck.com/line_developers_tw/how-fcu-speeds-up-to-line-shopping-monitor-workload How FCU speeds up to LINE Shopping monitor workload? By Winter Hung
    3. https://speakerdeck.com/line_developers_tw/speed-up-ios-development-with-lldb-code-injection-and-framework-live-preview Speed up iOS Development with LLDB Code Injection and Framework Live Preview By JJ Lin

新星計畫新創團隊投影片集錦:

本屆 TECHPUSLE 也邀請到運用 LINE 平台打造應用的10家新創團隊,命題都非常實用有趣,可分為生活助手、娛樂、教育,與金融科技相關的應用。

相關投影片如下:

  1. 牙醫小幫手: https://drive.google.com/drive/folders/1CK9dab7zB5axMhazZFQtC56Xge30g2Td?usp=sharing
  2. 記帳雞: https://drive.google.com/drive/folders/1JQlCL4nweC2N99w8wefiMMbqph7P-A0u
  3. 看牙小鬧鐘: https://drive.google.com/open?id=1vB0sVXQFLlGQV_SE7x4k0ipl0DYld5AH
  4. 途你: https://drive.google.com/file/d/1CfLK9pw0WzpRk2fER-oCdjZg0Z7jaol7/view?usp=sharing
  5. 肚肚: https://drive.google.com/file/d/1mBO3arUREexmj6HY8gXO3VN4Nzyahhvh/view?usp=sharing
  6. 通勤學: https://drive.google.com/file/d/1msujCVxmRLTCHS1de-oqyUC1ayGX1kg4/view?usp=sharing
  7. Montaggio: https://drive.google.com/drive/folders/1fUT5_7hcetzn0lYeLQnkxyHfK6yIm0za
  8. Tiki Poki: https://drive.google.com/file/d/1ORFz7uejO0iyuSQUV8Hge3NvyFQEF5qg/view?usp=sharing
  9. Dr. LINE: https://drive.google.com/file/d/1DOgHmkJuSJlOE_0dhpE4-C-0SFHdvB7f/view?usp=sharing
  10. 優活家: https://drive.google.com/file/d/1Vs7USy78NfkK_A5SfZkm3tOjKYodoNkg/view?usp=sharing

活動小結

本次年度開發者大會與以往的活動內容有許多的不同,因為主辦單位們希望可以讓開發者們與工程團隊有更多的互動。也希望開發者們能有更好的研討會參與體驗,更多的收穫與更多的互動。 畢竟研討會最重要的不是台上的講者,而是每一位參與的開發者。

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年LINE 開發社群計畫活動時程表 (持續更新)https://engineering.linecorp.com/zh-hant/blog/line-taiwan-developer-relations-2019-plan/)

[研討會心得] 20191211 Chatbots Taichung #5 at 台中夢森林

前言

大家好,我是 LINE Taiwan 的 Technical Evangelist - Evan Lin。這次很開心受到 chatbot 社群台中分部的邀請,參加了 “中部人的 Chatbots Meetup 聊天機器人小小聚 #5 @ 台中夢森林” 的聚會活動,並且分享 LINE API 更新與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓聊天機器人的開發動能更加的盛大。

  • 社群 Chatbots Meetup: https://chatbots.kktix.cc/
  • 本次活動網頁: 活動網址
  • 本次活動的共筆紀錄: https://hackmd.io/MA3uyLKtTn24KUx1iBWSzQ?both

由於 Chatbots Meetup 本身屬於社群自主性的活動,裡面也有許多社群朋友所贊助的閃電秀。裡面的所有內容也是相當的難得與有趣。也希望能夠透過本篇文章讓大家稍微了解 Chatbots Meetup 社群閃電秀的魅力。

以下分享一下個人在這場活動參與的心得,想要了解更多也歡迎去查看社群共筆紀錄。 https://hackmd.io/MA3uyLKtTn24KUx1iBWSzQ?both

TECHPULSE RECAP and LINE API Update 201912 / 資深開發技術推廣工程師 Evan Lin

TECHPULSE 投影片

LINE API Update 201912

LINE 開發者官方社群 OA 大升級:

就在 12/04 的 LINE TECHPULSE 2019 的大會上,來自韓國的 Jaewon 跟台灣工程師 Penny 有跟大家介紹 Clova Chatbot builder ,並且我們也跟大家想分享了,其實現在開始在 LINE 開發者官方社群 (ID: line_tw_dev) 也已經將 Clova Chatbot builder 整合進來,希望能讓每一位開發者都能夠清楚了解 LINE 平台的開發相關資料該如何尋找,也歡迎大家看看這一篇介紹文章 - LINE 開發者官方社群小幫手 – 操作體驗篇

部分 LIFF 功能暫停使用

如同之前新聞 「部分 LIFF 功能暫停使用」所述,有一些 LIFF 的功能在即將上架的 iOS 9.19.0 之後就會暫停使用。在這個聚會上也跟大家公布一下,也請開發者們等待更近一步的消息公佈。

相關還有更多的新聞,也歡迎大家到投影片裡面查看。

至於 LINE TECHPULSE 2019 的投影片內容部分,也歡迎大家到投影片裡面查看,如果有任何 LIFF 使用上的問題與建議,歡迎大家在社群提問與討論。

更多相關內容:

如何打造一個好的機器人開發框架 / C.T.Lin

投影片

來自資拓資訊的 CT ,跟大家分享聊天機器人開發框架 Bottender 的開發經歷。 整個內容相當有趣,敘述著當初公司接到案子要開發聊天機器人的那一刻,就想要打造給自己用的聊天機器人框架,透過支援的平台增加,與功能的增加,也開始想要把開發框架開源出來給社群的夥伴一起使用,一起來打造更好的平台生態。

整個內容隨著時間軸來了解 Bottender 框架是如何建立與逐漸成長的過程,也有討論到隨著每個平台不同的架構與支援功能在開發一個框架的時候應該要如何應對。 最後 Bottender 也在日前正式的宣布 1.0 ,歡迎大家來關注並且了解這開源聊天機器人開發框架。

更多相關內容:

閃電秀

三個講者之後,接下來就是介紹這個社群最有魅力的部分就是閃電秀。所有的閃電秀可以參考這篇共筆文章 https://beta.hackfoldr.org/chatbot/ ,由於都是五分鐘的閃電秀,主要內容快速用條列介紹給各位:

  • 能使用變數的訊息推送小工具 / 戴均民
    • Slide
    • LINE 訊息推送工具
    • 簡介:
    • 為了解決發送報名成功(或是抽獎成功)的個人客製化訊息的工具,可以解決發送報名成功訊息的工具,並且是支援 FLEX Message ,裡面還可以帶參數參考到 Google Sheet 裡面的變數。
  • 叩叩蛋—敲開你的心 / 徐弘欣、葉昭甫(與其他組員)
    • Slide , 影片
    • 簡介:
      • 很有趣的專案,透過機器學習的方式來幫大家打開社交的困難點。讓大家更願意用「真心」的方式來聊天與交友,打破語言尷尬的困難點。還結合寵物養成系統,很期待正式上線的時間。
  • 伸手拍共享筆記 / 許賀凱、劉羽筑、劉曛綺
    • 簡介:
      • 第三組一樣是來自於逢甲大學的朋友,裡面有提到這次會有兩組來社群分享是透過老師的推薦。而這個組想要解決的問題就是共筆的問題,在參與社群活動或是上課的時候,或多或少都會做一些心得整理。但是什麼樣能夠有效的整理成一篇文章讓大家相互學習分享呢? 就是透過照片的相似程度來做判別來讓筆記能夠集合在一起。

活動小結

這是我第一次到台中參加開發者社群的分享,遇到了許多有創意與熱情的開發者。讓我驚訝的是逢甲大學的學生畢業專題完成度竟然如此的高,希望能有更多有熱情的開發者能加入聊天機器人的開發生態,更希望大家會喜歡在 LINE 平台的開發,有問題歡迎在社群詢問與討論。

社群分享永遠是讓創意激盪的最佳方式,而 Chatbots Meetup 是一個很熱情與充滿創造力的社群組織。也希望有更多有創意的開發者願意加入 LINE Chatbot 的開發行列,更希望能熱情的參與社群的活動與一起來分享。

立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE開發社群計畫」

LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年LINE 開發社群計畫活動時程表 (持續更新)https://engineering.linecorp.com/zh-hant/blog/line-taiwan-developer-relations-2019-plan/)

[TIL][Golang] 如何抓取 Youtube 影片的相關資訊,與使用 Go 下載 Youtube 影片 (2020/06/03 更新)

前言:

這個專案是之前在開發 Project 52 所開發出來的,原因是看到一些解析 youtube 影片資訊的內容。透過 Golang 的 channel 跟 goroutine 可以很快速的開發出來一個小工具。 專案完成後,其實也沒有特別維護他。想不到卻受到大家的喜愛,Star 數也破了兩百。

由於 Youtube 其實對於資料格式也有修改(截至 2019/12/10 當下) ,這裡也針對目前的資訊來探討如何透過 Golang 來抓取相關資訊,並且取得影片標題,作者姓名,甚至是取得下載鏈結的方式。

(更新: 2020/06/02 ) 由於 YouTube 又再一次更新了影片網址的取得方式,個人也認爲相當適合分享。在此整理一下相關更新部分在同一篇文章中。

開源專案: github.com/kkdai/youtube

投影片:

Github: https://github.com/kkdai/youtube

直接下載使用:
- go install github.com/kkdai/youtube/youtubedr

用法1: (另存檔名為 Campaign Diary.mp4)
youtubedr -o "Campaign Diary".mp4 https://www.youtube.com/watch\?v\=XbNghLqsVwU

用法2: (不指定檔名,而使用影片標題)
youtubedr https://www.youtube.com/watch\?v\=XbNghLqsVwU

抓取 Youtube 影片資訊

取得 Youtube 影片 ID 與取得資訊:

舉個例子 Rob Pike 在 dotGo 2015 裡面的一個很棒的 talk - Simplicity is Complicated ,該影片的位置如下:

https://www.youtube.com/watch?v=rFejpH_tAHM

這邊簡單的簡介一下,在 Youtube 每一則影片都有一個 ID,這個影片的 ID 則為 rFejpH_tAHM

如果需要取得影片的相關資訊,則需要呼叫

https://youtube.com/get_video_info?video_id={YOUR_VIDEO_ID}

來取得,也就是如果要取得這部影片的資訊需要鏈結到 https://youtube.com/get_video_info?video_id=rFejpH_tAHM

取得資訊與相關處理程式碼:

接下來依序討論如何尋找影片 title 與資料。首先來詳細查看剛剛取得的相關資料。

因為取得下來的是 URK-encoded query string 的資料,需要透過以下的處理方式。

首先,你需要處理一下錯誤訊息。由於許多的影片是禁止下載分享,如此一來在取得相關資訊的時候則會發生錯誤的 status ,這裡需要處理一下。

取得影片標題與影片作者資訊:

這裡得說一下,其實大多數的資料有修改過。跟網路上可以找得到的資訊不同。所以後來花了很多的時間重新搜尋相關資訊,並且整理與轉換。 透過上述的 parseVideoInfo 轉換後可以取的 url.Values 也就是變數名稱的 answer

處理上可以參考下列的方式,由於發現 ``answer[“player_response”]` 裡面有 Map 結構的資料格式,於是透過以下的方式可以取得相關資訊。

這邊有些比較少見的用法,稍微解釋一下。

if err := json.Unmarshal([]byte(playResponse[0]), &personMap); err != nil {
		panic(err)
	}

這個透過 JSON unmarshal 的方式來將JSON string 轉換成 map 。 轉換成 map 之後就可以尋找與取值,這裡可以使用 videoDetails

至於讀者可能會好奇這些資料格式是如何知道的,並且知道資料所在的位置。 這也是不斷地透過 iteration 來尋找才找到的。

取得 map 資料取出後,由於資料預設格式都會是 interface{} 如果要轉換成 string 輸出的話。可以透過 type assertion 或是直接轉換的方式。

下載影片:

來講解一下所有的影片格式搜尋方式,還有如何找到最高解析度的影片。

這邊可以從 player_response 去拿出 stream Map 也就一個 Array 的 JSON 資料。 (如同投影片內敘述的)。

這時候需要針對取得的 JSON 資料開始做處理,建議方式如下:

  • 先到 JSON Lint 網站去將取得的 JSON raw data 加以轉換成可讀型態。
  • 再來複製貼上到 editor 去除掉一些 web css tag
  • 最後將資料貼到 JSON-TO-GO 就可以得到 Go structure

看起來可以得到下載鏈結 (but..)

看起來這樣從 [“streamingData”][“formats”][0][“url”] 取得下載網址,但是似乎不是每個影片都有提供這樣的資料。

某個影片去尋找資料的時候,卻發現沒有 url 的資料可以找,但是卻多了一個資料 cipher ??

Cipher and Decipher:

這時候開始需要尋找相關資訊,還好找到這篇文章。 裡面 有提到相關的說明,主要就是以下幾件事情:

  • cipher 是一個加密後的資訊,需要做 decipher 來取得 url
  • 至於 decipher 主要透過三個 functions 來處理:
    • EQ() 負責某個字元跟第一個字元交換。
    • Splice() 負責只取前面 n 個字元。
    • Reverse() 負責將字串整個反向。
  • 但是每次的 decipher 其實會由順序不同的這三個 functions 組合而成。
  • 該組合需要去查看 base.js 才能得知。

Retrieval base.js and migrate to Go code

那麼要如何正確取得 base.js 以及如何取得完整的 decipher 資料流程呢?

  • 首先先到 https://www.youtube.com/embed/{VIDEO_ID}?hl=en 取得 base.js 位址。
  • 其中位址可能是 https://www.youtube.com/s/player/e3cd195e/player_ias.vflset/en_US/base.js 這樣的資訊。
  • 之後開啟 base.js 內容,尋找 decipher 的整個內容。
  • 將相關內容透過對應韓式來將 cipher 做相關的處理。

這一段程式碼展示如何來找到 base.js 內的 decipher function 內容,並且將 EQ()splice()reverse() 做紀錄,並且也找出 Args (arguments) 。

(相關技巧主要透過 regular expression 的方式,細節可以參考官方文件 regexp。)

之後要透過相關的 Mapping 方式透過 Go 的函式來對 cipher 字串做處理。最後~~最後就可以取得 url 啦。(撒花

結論:

透過網路爬蟲的方式,透過後台轉換的方式來取得 YouTube 相關資訊。 這是一個漫長但是很有趣的過程,不僅僅可以學習網路爬蟲技巧與相關的字串搜尋與處理技巧。

目前已經完整專案開源,並且希望能有更多人的加入來一起幫忙。 詳情可以看

Github: https://github.com/kkdai/youtube

Reference:

[好書分享] 橫衝直撞: Uber刷新市值、3年成長20倍,卻成為全球麻煩製造機背後的教訓(Wild Ride)

刷新未來: 橫衝直撞: Uber刷新市值、3年成長20倍,卻成為全球麻煩製造機背後的教訓(Wild Ride)

作者: 亞當.藍辛斯基  
原文作者: Adam Lashinsky  
譯者: 謝儀霏  
出版社:天下雜誌出版 
出版日期:2018/10/01 
語言:繁體中文 
ISBN: 9789863983590 

買書推薦網址:http://moo.im/a/68osHU

前言:

這一系列的書其實是「雙十一: 讀墨三本七五折」 買的,緊接著在「刷新未來」之後。 不過這本書的內容也相當有趣,也是很讓我閱讀起來欲罷不能。 身為科技宅宅,對於 Uber 除了是他的服務之外,就是他的許多開源專案。不論是 zap 專案,或是機器學習平台 Horovod ,都是令我相當喜愛的開源專案。

但是 Uber 在讀者們的心目中是如何地位? 是一個高科技的公司? 是一個具有爭議性的公司? 是一個在許多區域都挑戰當地法律的公司?

這本書將會由前執行長- 卡蘭尼克的創業過程來敘述,讓讀者能夠了解到卡蘭尼克創業過程外,更可以了解 Uber 得成長過程。

內容簡介:

它讓你用手機「一鍵叫車」、掀起全球零工經濟浪潮;
飆進311個城市,全球使用次數突破100億次
卻也挑戰法令,造成個資外洩、司機抗爭……
Uber讓人又愛又恨,凸顯多少矽谷新創不為人知的面貌?

在全球,Uber平均每天完成1,500萬趟搭車服務,活躍司機超過300萬人;
在台灣,你可以用Uber Eats訂餐,在家也能吃到排隊美食。
即使你沒用過它,但你一定聽過它、罵過它。

內容簡介來自「讀墨」:http://moo.im/a/68osHU

整本書主要圍繞著備受爭議的前執行長 - 卡蘭尼克的故事,一開始從他下台前發生的相關事情開始敘述 Uber 。一個具有一些技術的科技領先公司接連爆出許多新聞。 性騷擾,不遵守法令,偷安裝各種追蹤軟體。 導致卡蘭尼克必須下台的故事,也帶到了想要進攻大陸卻因為法令與競爭者滴滴出行的競爭下,必須要考量另外的出路來讓公司保持競爭力。

接下來鏡頭一轉到了卡蘭尼克的大學時候,開始從頭敘述他是創業的。透過其他人的閑置電腦資源分享檔案與歌曲而開始賺錢創業 Scour ,但是卻因為遇到暗藏心機的金主而導致第一個創業失敗。 接下來透過相關技術他又創立了 Red Swoosh 這次他不積極找資金擴張,反而慢慢地做。 即使做到剩下兩個員工也不斷努力,最後總算被併購之後反而當起來創業顧問。

在雲遊四海的創業顧問生涯,他找到了 Uber 的啟蒙時期。並且加入了 Uber 積極地打造 Uber 的生意,進而成為現在的產業龍頭。

最後一個章節則是展望未來, Uber 如果真的會出現敵人將會是什麼? 不是 Lyft ,不是 Grab ,而將會是自動駕駛汽車。所以 Uber也跟 Tesla 較勁要發展自動駕駛的技術。相當有趣的一本書。

心得:

Uber 的傳奇故事,其實在許多的科技新聞都會提。但是總是對前執行長的著墨可能不夠,無法了解為什麼他們會有這一些取巧與冷酷的做法。但是透過這一本書可以深入的了解前執行長卡蘭尼克的故事。

並且可以了解創業應該注意的事情,也能夠更了解一個成功的企業除了市場的敏銳度之外。該如何讓服務快速迭代的推廣到每一個城市也是很令人欽佩的。

Uber 對於這個有所謂的教戰手冊,清楚地傳授業務推廣單位能夠在一個嶄新的城市中要如何開始新的 Uber 的事業群推廣。也是因為類似的準備才能讓 Uber 在全球擴張的速度令人咋舌。

如果你是一個具有創業精神的人,推薦你看這一本書。如何果你是一個科技人,也推薦你看看這本書,對於創業能夠有更深一層的了解。

[好書分享] 刷新未來: 重新想像AI+HI智能革命下的商業與變革 (HIT REFRESH)

刷新未來: 重新想像AI+HI智能革命下的商業與變革
HIT REFRESH : The Quest to Rediscover Microsoft's Soul and Imagine a Better Future for Everyone
作者: 薩帝亞.納德拉  
原文作者: Satya Nadella  
譯者: 謝儀霏  
出版社:天下雜誌出版 
出版日期:2018/01/03 
語言:繁體中文 
ISBN: 9789863983095 

買書推薦網址:http://moo.im/a/6ilwLW

前言:

這一系列的書其實是「雙十一: 讀墨三本七五折」 買的, (宅宅的雙十一就是這麼~平淡且枯燥乏味)但是這本真的太有趣了,於是這幾天就讀完了。 加上裡面有一句讓我注意到的話語 「夏天,25歲的我加入微軟,我是Windows NT的技術傳教士(evangelist)」。

也就是因為這一句話,就讓我認真的把這一本書看完了。 對我來說,這本書的寫作方式很像是透過 Developer Relations 的口吻來闡述著身為微軟新任 CEO 對於公司的看法與對於未來的展望。

內容簡介:

AI超速普及,人類不會被取代的獨有價值是什麼?
雲端之後,下一波關鍵科技是什麼?什麼樣的企業,將主導未來?如何帶領變革?

科技加速顛覆,成功不會長青,未來沒有藍圖。
最大的挑戰不是未知,而是我們是否能更開放的思辨、持續刷新,就能重新啟動、開展未來!

內容簡介來自「讀墨」:http://moo.im/a/6ilwLW

整本書的開頭透過被選拔為微軟新任執行長的過程,帶到作者的從印度的成長歷史到微軟近幾年的困境。 就像一部傳記電影般的開頭,讓人會很想認真的看下去。 接下來一幕又緩緩地回到作者剛加入微軟的時光,那時候跟 Bill Gates 和 Steve Ballmer 的會面與學習到的精神,是如何讓作者在往後二十多年的微軟生涯來面對不同的挑戰。

接下來的故事也是敘述著作者在微軟的許多歷程,就像是一本小小的微軟歷史一樣。一開始是最受歡迎的 Windows NT 與客戶相關的部門,後來到了一個新的產品事業部,也就是微軟的雲端事業部門(後來讓大家熟知的 Azure )。透過在新部門的戰戰兢兢的嘗試,挑選出正確的路途來讓業績成長,最後終於被提拔為微軟的新任執行長。

也是因為作者的工作歷程的原因,讓他有著相當正面的思考想法。清晰的判斷也讓近幾年的微軟脫胎換骨,努力結合許多以往的競爭對手,讓微軟的平台到處發光。 也透過擁抱開源來讓微軟的雲事業不是僅僅在於 Windows 系統的架構雲,更是以人工智慧與為客戶導向為主的雲端服務系統。

最後一個階段,就是作者分享他對於近幾年幾個科技趨勢的看法分享。從科技信任,人工智慧到自由化貿易的面向上分享不少個人的意見。

心得:

這本書籍的寫作方式如同我一開始提到的,是透過 Developer Relations 的方式來寫。也就是這本書原來就是可以拿來對外宣傳微軟已經脫胎,邁向未來之外。也是可以給微軟員工作為堅定信心,持續努力開創未來的一本書籍。

內容的說明上,個人相當建議想要了解該如何做一企業科技品牌再造的人要好好閱讀。也因為像我說的文章的鋪成其實是很用心地透過類似電影分鏡的方式來排列,讓閱讀的人會被吸引住的忍不住看完。 不過對於微軟的歷史上面也相當詳細的交接不少階段的成長過程,對於許多學生與科技業的從業人員都可以透過這本書籍來當作是微軟近幾年的成長歷史書籍來看。

如果你不認識微軟新的執行長 - Satya Nadella 這本書相當建議你可以好好閱讀。