整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          微博,也支持SVG啦!(附內測申請)


          個好消息,(新浪)微博也支持 SVG 了。

          一個壞消息,品牌方的內卷新賽道又誕生了。

          一個更好也可能更壞的消息,(新浪)微博與微信公眾號生態的 SVG 語法框架形式有較大差異。但有個值得一提好消息是,據了解 E2.COOL 黑科技 SVG 編輯器已經開始上架微博 SVG Beta 專用模版。

          究竟怎么回事?
          先行科普一下。



          大家好我是交互設計師計育韜,首先非常感謝微博的這次 40+ 專業用戶內測邀約活動。雖然我是其中唯一的技術側(其他均為平臺側)個體,但無論是產品體驗還是技術交流,計老師都已經感受到了微博官方的產品誠意和平等姿態,點贊!未來更多的微博 SVG 產品動態一定要關注微博賬號
          @頭條文章,官方資訊將以此為準喔!

          還不了解什么是 SVG?摒棄純技術性的概念詮釋,簡單來講微信公眾號圖文中具備通過手指點擊等行為產生交互響應的畫面,如今大多基于 SVG 技術。圈內的 SVG 品牌頭號玩家包括 GQ 實驗室、寶馬中國、喜茶、蒂芙尼、蕉內等,想必對運營人而言都是如雷貫耳般的存在。

          如果你想進一步理解它,那么可以閱讀我的科普專著《硬核運營:新媒體技術流養成》,在大多數市立和高校圖書館都可以借閱到。

          內測體驗如何?
          開發層面可有差異?



          以下是基本的操作指南,請務必收藏好或傳閱給具體崗位的運營人員:對于已經獲取內測資格的賬號而言,只需要在編輯微博
          頭條文章時,點擊剪切板功能,再點擊「插入 SVG 代碼」按鈕即可——


          就是如此簡單,而需要注意的是:

          1)頭條文章的 SVG 支持按板塊編輯,這就意味著
          文本穿插 SVG 交互的排版制作起來會輕松得多,對比之下微信公眾號圖文草稿編輯頁始終是沒有官方 SVG 編輯入口的,一切都需要依賴各類第三方插件進行布局。

          2)它的本質是代碼的編輯窗口,因此不僅限于插入 <svg></svg> 結構,也可以將譬如橫向滑動(CSS)、視差(perspective 裸眼 3D)等布局進來,
          那么這里就是一個重要的想象力突破口了。


          (品牌方如需查看內測案例預覽請微信小窗與我聯系)


          而提到想象力,SVG 發展至今、其有效的信息分層、酷炫的動畫特效、豐富的感官體驗……讓我作為行業的先行者都尤其欣慰。且身為研究型學者,計老師也通過公益普及和培訓授課等形式間接孵化了大批青年工作室團隊,相信他們很快也會投入微博端 SVG 設計研究,為每一個普通的運營人提前鋪平應用道路。

          當然請注意,微博 SVG 的編輯區目前是存在字符限制的,對于頂尖開發者來說如果你植入重型交互裝置,很可能當前不在微博 SVG 接受范圍內,建議控制到 30W 代碼字符以下:


          但正如開場所言,W3C 聯盟提供了 SVG 的全部應用空間,而 APP 則要具體問題具體分析,
          通過「白名單」這類屬性與能力的限制規則,管控 SVG 可能干擾到 APP 生態自身技術架構穩定性的因素。

          所以現在,我要談一談微博 SVG 交互設計與微信公眾號生態的區別,無論你是專業開發者還是內容運營人,都請仔細閱讀接下來的說明!

          以微信公眾號為例,很多行業晚輩可能并不了解,在 2016 年為了和微信團隊敲定《微信下 SVG AttributeName 白名單》,我和廈門嘉庚學院的研究人員就通過各種壓力測試限制了 1)部分 AttributeName 的屬性(在彼時可能導致微信閃退)2)屬性引用能力(避免誤擾到圖文外層 CSS 樣式)。且隨著行業的發展,白名單中又出現了如對包括 <embed>、<detail> 標簽,以及 <width>、<height> 動畫重復次數等非常細節化的限制。



          因為在任何生態中,都存在看不見的力量隨時覬覦平臺漏洞之下的財富。
          「白名單」的本質不是為了制約創作者,而是守住平臺的底線,并給予所有參與人公平公正的運行環境。所以作為規則的制定者,總有其苦衷可能無法為后人理解,但在無形中只要維護好了微信的生態安全,其他紛擾就不值一提了。

          那么,微博 SVG 生態內包含形同「白名單」的同類規則嗎?

          我確切地告訴你,這是肯定的。并且,它在未來也一定會不斷被迭代更新。目前,微博 SVG 也同樣制約 <script> 的應用,Dom 相關事件如 onload、onclick 等。不過對于 <id>,微博 SVG 持開放態度,這就意味著——

          微博的 SVG 是相對更「科學」的 SVG,生態內的被動動畫代碼書寫邏輯與微信公眾號生態可以截然不同。它更傾向于 H5 的設計思維,易于被運營人理解和學習。與此同時,它的動畫豐富性理論上限可能遠超微信公眾號生態圈,我們的一次簡單的點擊行為,可以綁定到無限數量目標的不同動畫形式。

          此外,包括 <use> 等標簽的應用已成為可能,開發者通過定義可重復使用的元素的標簽,能更高效地在 SVG 內布局它們;濾鏡、漸變、蒙版等一大批在矢量設計軟件中司空見慣的藝術特性,基于 <id> 或能實現正確表達……

          而針對微博 SVG 的規則差異,建議各大主流 SVG 編輯器(秀米、135、E2.COOL)在將來提供對應的專屬組件或獨立操作專區,雖說有大量既往的 SVG 模板確實能在微博中復用,但創想的遠帆已經悄然揚起,更史詩感的交互體驗一定會誕生在微博上而不是微信公眾號內。

          至于當下,微博 SVG 的「白名單」尚未完全敲定,我在也參與協助測試之中。此后等產研側有了明確的定數,我會第一時間如發布微信 SVG AttributeName 白名單那樣與大家分享準確技術信息。也在此告誡,任何嘗試以突破或繞過微博 SVG 相關功能限制進行開發的行為,都在技術圈被定位為「對抗式開發」,這無論在哪一個平臺內都是不會被允許的。尊重生態,尊重平臺,對開發環境抱有基本的感恩之心,這是每一個開發者應當秉持的良好職業道德。

          查看更多實例
          聊聊創作的想象空間



          微博官方最早是于今年 3 月由內部人員啟動生產環境的產品測試,很高興地看到當時的一些實例就已經在應用著名的 E2.COOL 黑科技 SVG 編輯器。那么再結合一些圈內最新的測試,接下來計老師帶同學們了解更多具體案例及其技術意義。

          一、循序漸進,從簡單特效開始實踐

          最具代表性的微信公眾號 SVG 效果是什么?如果只能選一個的話,計老師認為「點擊-伸長」型組件非其莫屬。對于大多數運營人來講,它的直觀屬性就是使得圖文畫面向下延展,擴大可視范圍并展示出更多內容。對開發者而言,它經歷了一代定寬伸長(@GL 意符互動發明),二代分層定寬伸長(@Apple 發明),三代 <width> 式分層適配伸長(@小楊 交互實驗室發明)和準 3.5 代類積分思維收縮/伸長(@科蚪發明),那么它可以被應用在微博 SVG 嗎?怎么用?

          (品牌方如需查看內測案例預覽請微信小窗與我聯系)


          首先,由于方才提到我們尚未敲定最終的微博 SVG 白名單規則,因此初步上手先選擇簡單形態的伸長更為穩妥。如這個實例就是 3 月份時候,博主基于 E2.COOL 黑科技 SVG 編輯器最基本的「點擊-伸長」、「點擊漸現」組件進行的一次案例復用實驗。

          考慮到微博 SVG 生態正處于起步階段,對于并不真正熟悉 SVG 代碼運行邏輯的運營人來說,當下如果能獲得內測資格,那么應用好這類基本動畫效果足矣。至于具體的模版操作流程,還是建議關注編輯器側的資訊動態。


          在完成「點擊-伸長」案例基礎上,或許你就能再逐步通過自由拼裝,去完成「上色伸長」這樣更多的進階伸長動畫效果。


          (品牌方如需查看內測案例預覽請微信小窗與我聯系)


          如上微博 SVG 實例的排版方法為:


          對于頭部品牌,如果希望盡快獲得微博 SVG 能力,可以與我們 JZ Creative Studio 取得聯系,目前計老師也正在安排部分我們的長期研究合作品牌開啟相關功能并正式投入內容制作。
          且出于科研目的,我們依然會免費定制開發超越微信公眾號生態可能性的更高級 SVG 交互設計。

          二、轉變思維,探索更豐富的動畫能力

          前面已經提到,微博 SVG 的理論效果上限目前是明確高于微信公眾號生態的,下面這個我布局的實例則為了表現 <id> 能力帶來的新特性。

          (品牌方如需查看內測案例預覽請微信小窗與我聯系)

          通過「長按」畫面,魔方中的三個立方體會朝三個方向各自運行,「松開」畫面后它們又回逐步回到原位。且畫面中的實體素材只有一個立方體,魔方的構成通過同一元素堆疊而成。講到這里,相信專業開發者們已經欣喜萬分。具體的技術細節在此我就不展開了,有需要的讀者請移步今天發布的次條圖文。

          你也可以前往 E2.COOL 黑科技 SVG 編輯器通過微博 SVG Beta 專用模版來理解這種關鍵能力的多樣化應用效果,像其中的「E2爆炸圖」模版就是非常典型的交互效果。

          如何申請內測?



          既往的長期深度合作伙伴可以直接咨詢 JZ(管理員微信 Zhuoya_Work),我們會視品牌方微博和微信公眾號的實際情況,決定是否交由微博官方開啟對應功能。

          而對于需要自行申請內測則可以向本公眾號回復「微博SVG內測」獲取申請鏈接排隊參與。

          如果你有任何建議,或在加入內測后遇到任何困難,歡迎通過不同渠道與我們聯系,我們將盡快匯總重要的用戶反饋,交由微博官方進行研究和回復。

          更多入門指南、實例分析、模版推薦請移步本期發布的次條鏈接點擊閱讀。我們也會盡快組織包括公開直播課、教學錄播課等形式的科普工作,同時也將在知識星球開始更新相關研究的最新成果:

          021年你需要知道的HTML標簽和屬性

          Web開發人員都在廣泛的使用HTML。無論你使用什么框架或者選擇哪個后端語言,框架在變,但是HTML始終如一。盡管被廣泛使用,但還是有一些標簽或者屬性是大部分開發者不熟知的。雖然現在有很多的模版引擎供我們使用,但是樂字節教育的老師和我們說還是需要盡可能的熟練掌握HTML內容,就像CSS一樣。

          在我看來,最好盡可能使用HTML特性來實現我們的功能,而不是使用JavaScript實現相同的功能,盡管我承認編寫HTML可能會是重復的和無聊的。

          盡管許多開發人員每天都在使用HTML,但他們并沒有嘗試改進自己的項目,也沒有真正利用HTML的一些鮮為人知的特性。

          下面這5個通過HTML標簽/屬性實現的功能我覺得需要了解一下:

          圖片懶加載

          圖片懶加載可以幫助提升網站的性能和響應能力。圖片懶加載可以避免立即加載那些不在屏幕中立即顯示的圖片素材,當用戶滾動臨近圖片時再去開始加載。

          換言之,當用戶滾動到圖片出現時再進行加載,否則不加載。這就降低了屏幕內容展示過程中的圖片素材的請求數量,提升了站點性能。

          往往我們都是通過javascript來實現的,通過監聽頁面滾動事件來確定加載對應的資源。但是,在不完全考慮兼容性的場景下,我們其實可以直接通過HTML來直接實現。

          注:本篇的提到的標簽和屬性的兼容性需要大家根據實際場景來選取是否使用

          可以通過為圖片文件添加loading="lazy"的屬性來實現:


          輸入提示

          當用戶在進行輸入搜索功能時,如果能夠給出有效的提示,這會大大提升用戶體驗。輸入建議和自動完成功能現在到處可見,我們可以使用Javascript添加輸入建議,方法是在輸入框上設置事件偵聽器,然后將搜索到的關鍵詞與預定義的建議相匹配。

          其實,HTML也是能夠讓我們來實現預定義輸入建議功能的,通過<datalist>標簽來實現。需要注意的是,使用時這個標簽的id屬性需要和input元素的list屬性一致。


          Picture標簽

          你是否遇到過在不同場景或者不同尺寸的設備上面的時候,圖片展示適配問題呢?我想大家都遇到過。

          針對只有一個尺寸的圖片素材的時候,我們往往可以通過CSS的object-fit屬性來進行裁切適配。但是有些時候需要針對不同的分辨率來顯示不同尺寸的圖片的場景的時候,我們是否可以直接通過HTML來實現呢?

          HTML提供了<picture>標簽,允許我們來添加多張圖片資源,并且根據不同的分辨率需求來展示不同的圖片。


          我們可以定義不同區間的最小分辨率來確定圖片素材,這個標簽的使用有些類似<audio>和<video>標簽。

          Base URL

          當我們的頁面有大量的錨點跳轉或者靜態資源加載時,并且這些跳轉或者資源都在統一的域名的場景時,我們可以通過<base>標簽來簡化這個處理。

          例如,我們有一個列表需要跳轉到微博的不同大V的主頁,我們就可以通過設置來簡化跳轉路徑


          <base>標記必須具有href和target屬性。

          頁面重定向(刷新)

          當我們希望實現一段時間后或者是立即重定向到另一個頁面的功能時,我們可以直接通過HTML來實現。

          我們經常會遇到有些站點會有這樣一個功能,“5s后頁面將跳轉”。這個交互可以嵌入到HTML中,直接通過<meta>標簽,設置http-equiv="refresh"來實現


          這里content屬性指定了重定向發生的秒數。值得一提的是,盡管谷歌聲稱這種形式的重定向和其他的重定向方式一樣可用,但是使用這種類型的重定向其實并不是那么的優雅,往往會顯得很突兀。

          因此,最好在某些特殊的情況下使用它,比如在長時間用戶不活動之后再重定向到目標頁面。

          后記

          HTML和CSS是非常強大的,哪怕我們僅僅使用這兩種技術也能創建出一些奇妙的網站。雖然它們的使用量很大很普遍,還是有很多的開發者并沒有真正的深入了解他們,還有很多的內容需要我們深入的去學習和理解,實踐,有很多的技巧等待著我們去發現。

          文章轉載至樂字節

          最后給大家推薦幾個b站超詳細的Java自學課:

          Servlet入門教程BV1D5411373E

          Vue、Vuejs教程,BV19V41177od

          SpringBoot+Vue項目實戰BV1o64y117qQ

          lask是Django之外用Python實現的另一優秀Web框架

          今天用它

          Flask以自由、靈活著稱。在開發一些小應用的時候,使用Django會有“殺雞用牛刀”的趕腳,而使用Flask就非常合適。本文將使用Flask開發一個微博用戶畫像的生成器,最后效果如下:

          開發步驟如下:

          1. 抓取微博用戶數據;

          2. 分析數據,生成用戶畫像;

          3. 網站實現,美化界面。

          一、微博抓取

          這里使用移動端的微博(m.weibo.cn),以為例。本教程使用chrome瀏覽器進行調試。

          1. 在“發現”中搜索“古力娜扎”,點擊進入她的主頁;

          2. 開始分析請求報文, 右擊打開調試窗口,選擇調試窗口的"網絡(network)"標簽;

          3. 選擇"Preserve Log",刷新頁面;

          4. 分析各條請求過程可以發現博文的數據是從https://m.weibo.cn/api/container/getIndex?XXX 類似的地址中得到的。其主要參數為type(固定值)、value(博主ID)、containerid(標識,請求中返回)、page(頁碼)

          下面開始實現爬取博文的代碼。

          # 導入相關庫

          import requests

          from time import sleep

          # 定義獲取博主信息的函數

          # 參數uid為博主的id

          defget_user_info(uid):

          # 發送請求

          result = requests.get('https://m.weibo.cn/api/container/getIndex?type=uid&value={}'

          .format(uid))

          json_data = result.json() # 獲取繁華信息中json內容

          userinfo = {

          'name': json_data['userInfo']['screen_name'], # 獲取用戶頭像

          'description': json_data['userInfo']['description'], # 獲取用戶描述

          'follow_count': json_data['userInfo']['follow_count'], # 獲取關注數

          'followers_count': json_data['userInfo']['followers_count'], # 獲取粉絲數

          'profile_image_url': json_data['userInfo']['profile_image_url'], # 獲取頭像

          'verified_reason': json_data['userInfo']['verified_reason'], # 認證信息

          'containerid': json_data['tabsInfo']['tabs'][1]['containerid'] # 此字段在獲取博文中需要

          }

          # 獲取性別,微博中m表示男性,f表示女性

          if json_data['userInfo']['gender'] == 'm':

          gender = '男'

          elif json_data['userInfo']['gender'] == 'f':

          gender = '女'

          else:

          gender = '未知'

          userinfo['gender'] = gender

          return userinfo

          # 獲取古力娜扎信息

          userinfo = get_user_info('1350995007')

          # 信息如下

          userinfo

          {'containerid': '1076031350995007',

          'description': '工作請聯系:nazhagongzuo@163.com',

          'follow_count': 529,

          'followers_count': 12042995,

          'name': '我是娜扎',

          'profile_image_url': 'https://tvax2.sinaimg.cn/crop.0.0.1242.1242.180/50868c3fly8fevjzsp2j4j20yi0yi419.jpg',

          'verified_reason': '演員,代表作《擇天記》'}

          In [33]:

          # 循環獲取所有博文

          defget_all_post(uid,containerid):

          # 從第一頁開始

          page = 0

          # 這個用來存放博文列表

          posts = []

          while True:

          # 請求博文列表

          result = requests.get('https://m.weibo.cn/api/container/getIndex?type=uid&value={}&containerid={}&page={}'

          .format(uid, containerid, page))

          json_data = result.json()

          # 當博文獲取完畢,退出循環

          if not json_data['cards']:

          break

          # 循環將新的博文加入列表

          for i in json_data['cards']:

          posts.append(i['mblog']['text'])

          # 停頓半秒,避免被反爬蟲

          sleep(0.5)

          # 跳轉至下一頁

          page += 1

          # 返回所有博文

          return posts

          posts = get_all_post('1350995007', '1076031350995007')
          # 查看博文條數

          len(posts)

          1279
          # 顯示前3個

          posts[:3]

          至此,用戶的數據已準備就緒,接下來開始生成用戶畫像。

          二、生成用戶畫像

          1.提取關鍵詞

          這里從博文列表中提取出關鍵字,分析出博主的發表的熱詞

          import jieba.analyse

          from html2text import html2text

          content = '\n'.join([html2text(i) for i in posts])

          # 這里使用jieba的textrank提取出1000個關鍵詞及其比重

          result = jieba.analyse.textrank(content, topK=1000, withWeight=True)

          # 生成關鍵詞比重字典

          keywords = dict()

          for i in result:

          keywords[i[0]] = i[1]

          2.生成詞云圖

          from PIL import Image, ImageSequence

          import numpy as np

          import matplotlib.pyplot as plt

          from wordcloud import WordCloud, ImageColorGenerator

          # 初始化圖片

          image = Image.open('./static/images/personas.png')

          graph = np.array(image)

          # 生成云圖,這里需要注意的是WordCloud默認不支持中文,所以這里需要加載中文黑體字庫

          wc = WordCloud(font_path='./fonts/simhei.ttf',

          background_color='white', max_words=300, mask=graph)

          wc.generate_from_frequencies(keywords)

          image_color = ImageColorGenerator(graph)

          # 顯示圖片

          plt.imshow(wc)

          plt.imshow(wc.recolor(color_func=image_color))

          plt.axis("off") # 關閉圖像坐標系

          plt.show()

          三、實現Flask應用

          開發Flask不像Django那么復雜,小應用幾個文件就可以完成。步驟如下:

          1. 安裝

          使用pip安裝flask,命令如下:

          $ pip install flask

          2.實現應用邏輯

          簡單來說,一個Flask應用就是一個Flask類,由route函數控制它的url請求。代碼實現如下:

          # app.py

          from flask import Flask

          import requests

          from PIL import Image, ImageSequence

          import numpy as np

          import matplotlib.pyplot as plt

          from wordcloud import WordCloud, ImageColorGenerator

          import jieba.analyse

          from html2text import html2text

          from time import sleep

          from collections import OrderedDict

          from flask import render_template, request

          # 創建一個Flask應用

          app = Flask(__name__)

          ##################################

          # 微博相關函數 #

          # 定義獲取博主信息的函數

          # 參數uid為博主的id

          def get_user_info(uid):

          # 發送請求

          result = requests.get('https://m.weibo.cn/api/container/getIndex?type=uid&value={}'

          .format(uid))

          json_data = result.json() # 獲取繁華信息中json內容

          # 獲取性別,微博中m表示男性,f表示女性

          if json_data['userInfo']['gender'] == 'm':

          gender = '男'

          elif json_data['userInfo']['gender'] == 'f':

          gender = '女'

          else:

          gender = '未知'

          userinfo = OrderedDict()

          userinfo['昵稱'] = json_data['userInfo']['screen_name'] # 獲取用戶頭像

          userinfo['性別'] = gender # 性別

          userinfo['關注數'] = json_data['userInfo']['follow_count'] # 獲取關注數

          userinfo['粉絲數'] = json_data['userInfo']['followers_count'] # 獲取粉絲數

          userinfo['認證信息'] = json_data['userInfo']['verified_reason'] # 獲取粉絲數

          userinfo['描述'] = json_data['userInfo']['description'] # 獲取粉絲數

          data = {

          'profile_image_url': json_data['userInfo']['profile_image_url'], # 獲取頭像

          'containerid': json_data['tabsInfo']['tabs'][1]['containerid'], # 此字段在獲取博文中需要

          'userinfo': '<br>'.join(['{}:{}'.format(k, v) for (k,v) in userinfo.items()])

          }

          return data

          # 循環獲取所有博文

          def get_all_post(uid, containerid):

          # 從第一頁開始

          page = 0

          # 這個用來存放博文列表

          posts = []

          while True:

          # 請求博文列表

          result = requests.get('https://m.weibo.cn/api/container/getIndex?type=uid&value={}&containerid={}&page={}'

          .format(uid, containerid, page))

          json_data = result.json()

          # 當博文獲取完畢,退出循環

          if not json_data['cards']:

          break

          # 循環將新的博文加入列表

          for i in json_data['cards']:

          posts.append(i['mblog']['text'])

          # 停頓半秒,避免被反爬蟲

          sleep(0.5)

          # 跳轉至下一頁

          page += 1

          # 返回所有博文

          return posts

          ##############################

          ## 云圖相關函數

          # 生成云圖

          def generate_personas(uid, data_list):

          content = '<br>'.join([html2text(i) for i in data_list])

          # 這里使用jieba的textrank提取出1000個關鍵詞及其比重

          result = jieba.analyse.textrank(content, topK=1000, withWeight=True)

          # 生成關鍵詞比重字典

          keywords = dict()

          for i in result:

          keywords[i[0]] = i[1]

          # 初始化圖片

          image = Image.open('./static/images/personas.png')

          graph = np.array(image)

          # 生成云圖,這里需要注意的是WordCloud默認不支持中文,所以這里需要加載中文黑體字庫

          wc = WordCloud(font_path='./static/fonts/simhei.ttf',

          background_color='white', max_words=300, mask=graph)

          wc.generate_from_frequencies(keywords)

          image_color = ImageColorGenerator(graph)

          plt.imshow(wc)

          plt.imshow(wc.recolor(color_func=image_color))

          plt.axis("off") # 關閉圖像坐標系

          dest_img = './static/personas/{}.png'.format(uid)

          plt.savefig(dest_img)

          return dest_img

          #######################################

          # 定義路由

          # 指定根路徑請求的響應函數

          @app.route('/', methods=['GET', 'POST'])

          def index():

          # 初始化模版數據為空

          userinfo = {}

          # 如果是一個Post請求,并且有微博用戶id,則獲取微博數據并生成相應云圖

          # request.method的值為請求方法

          # request.form既為提交的表單

          if request.method == 'POST' and request.form.get('uid'):

          uid = request.form.get('uid')

          userinfo = get_user_info(uid)

          posts = get_all_post(uid, userinfo['containerid'])

          dest_img = generate_personas(uid, posts)

          userinfo['personas'] = dest_img

          return render_template('index.html', **userinfo)

          if __name__ == '__main__':

          app.run()

          以上就是全部的代碼,簡單吧?當然,單文件結構只適合小的應用,隨著功能和代碼量的增加,還是需要把代碼分離中不同的文件結構中以便開發和維護。最后,還差一個頁面的模版文件。

          3.模版開發

          模版需要有一個輸入的表單和用戶信息展示,基于Jinja2模版引擎。熟悉Django模版的應該可以很快上手,流程也和Django類型,在項目根目錄下建一個名為templates的文件夾并新建一個名為index.html的文件,代碼如下:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="UTF-8">

          <link rel="stylesheet" type="text/css" href="./static/css/style.css">

          <title>Flask之微博單用戶畫像生成器</title>

          </head>

          <body>

          <!--提交微博id的表單-->

          <div>

          <form action="/" method="post" id="search-form">

          <input type="text" name="uid" class="search" placeholder="微博用戶ID">

          <input type="submit" class="submit" value="生成畫像">

          </form>

          </div>

          <!--下面是用戶的展示信息-->

          <!--使用了模版的if語法,如果有才展示這塊內容-->

          </body>

          </html>

          這樣,應用實現完畢,項目結構如下:

          $ tree .

          weibo_personas

          ├── app.py

          ├── static

          │ ├── css

          │ │ └── style.css

          │ ├── fonts

          │ │ └── simhei.ttf

          │ └── images

          │ └── personas.png

          └── templates

          └── index.html

          進入項目文件夾,啟動項目:

          $ python app.py

          * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

          然后瀏覽器打開http://127.0.0.1:5000 地址就可以看到本教程最上面的效果。

          以上只是一個初步實現,還有很多需要完善的地方。比如,如果發布的博文比較多時,獲取時間比較長,可以考慮加個緩存,存儲已獲取的用戶,避免重復請求,前端也可以加個loading效果。本教程展示的只是單用戶,后面也可以批量獲取用戶信息,生成一個群體的用戶畫像

          學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入學習交流群

          626062078,我們一起學Python!


          主站蜘蛛池模板: 国产午夜精品一区二区三区小说 | 内射白浆一区二区在线观看| 国产SUV精品一区二区四| 国产一区二区三区久久| 波多野结衣一区在线观看| 日韩成人无码一区二区三区| 无码人妻精品一区二区三区在线| 一区二区三区影院| 日韩一区二区在线观看| 国产av一区二区精品久久凹凸| 麻豆果冻传媒2021精品传媒一区下载 | 一区二区三区在线|日本| 怡红院AV一区二区三区| 大香伊人久久精品一区二区| 精品国产一区二区三区不卡| 水蜜桃av无码一区二区| 亚洲一区精品中文字幕| 人妻久久久一区二区三区| 久久久精品人妻一区亚美研究所| 中文字幕一区二区视频| 久久国产高清一区二区三区| 国产福利电影一区二区三区| 亚洲一区无码精品色| 国产精久久一区二区三区| 精品视频一区二区三区| 国产免费一区二区三区不卡| 波多野结衣免费一区视频| 水蜜桃av无码一区二区| 久久毛片一区二区| 国产福利一区视频| 精品视频一区二区三区四区五区| 中文字幕一区精品| 末成年女AV片一区二区| 亚洲av色香蕉一区二区三区蜜桃| 精品国产一区二区三区在线| 色一情一乱一伦一区二区三区| 中文字幕久久久久一区| 激情内射亚洲一区二区三区| 精品国产日韩亚洲一区91| 国产福利电影一区二区三区,日韩伦理电影在线福 | 无码人妻一区二区三区免费|