直播修仙:使用.NET 的 WebView2 如何獲取請求的響應內容,以微信直播的互動直播為例...

背景

近幾年直播行業快速發展,門檻也越來越低,越來越的人涌入直播大軍。不得不說,直播不僅帶來了更多的娛樂消遣,還提供了一個新型的就業方式。

說起直播的類型,有一個非常小眾的娛樂直播,沒有主播,全靠觀眾的彈幕互動。比如:直播修仙,觀眾發彈幕進入修仙,就可以看到自己的打坐小人,然后屏幕各種隨機事件,送主播禮物可以獲取各種道具。近期在微信刷視頻號的時候,發現了好多類似的互動直播,有云蹦迪和各種互動游戲。

19867f622858df8f566a55807a05dcde.png

視頻號直播截圖

今天我們只聊技術,互動直播平臺沒有提供相關的 API 如何通過觀眾的評論來互動的?

實現原理

這里以微信視頻號直播為例,介紹一種獲取直播事件消息的方法,當然方法也適用于類似的其他平臺。

視頻號開啟直播的時候在視頻號的 Web 管理后臺,會同時看到觀眾發送的評論和產生的其他互動。那么只需要通過開發一個瀏覽器插件就可以實現實時獲取評論信息。這里我們 通過 WebView2 來獲取請求評論的響應內容來實現。

實現步驟

首先創建一個 WPF 應用,添加?Microsoft.Web.WebView2?包,然后頁面添加WebView2組件,首頁直接為視頻號管理后臺。

<Grid><Wpf:WebView2 Source="https://channels.weixin.qq.com/platform/live/liveBuild" MinWidth="800" MinHeight="500" Name="webView"/>
</Grid>

WebView2初始化完成后綁定WebResourceResponseReceived事件。此事件可以獲取到所有請求的內容,這里只需要獲取/mmfinderassistant-bin/live/msg的鏈接請求即可,然后獲取請求返回的內容。

public MainWindow()
{InitializeComponent();webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
}private void WebView_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{webView.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceivedAsync;
}private async void CoreWebView2_WebResourceResponseReceivedAsync(object? sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
{if (e.Request.Uri.EndsWith("/mmfinderassistant-bin/live/msg") && e.Response != null && e.Response.StatusCode==200){Stream content = await e.Response.GetContentAsync();string jsonText = new StreamReader(content).ReadToEnd();var list = ToLiveMsg(jsonText);}
}

以下是內容的處理。

public List<LiveMsg> ToLiveMsg(string str) {JsonNode jsonNode = JsonNode.Parse(str)!;var res = new List<LiveMsg>();var dataInfo = jsonNode["data"];if (dataInfo is null) return res;if (dataInfo["msgList"] is null) return res;foreach (var item in dataInfo["msgList"]!.AsArray()){var msg = JsonSerializer.Deserialize<LiveMsg>(item);Debug.Print(msg.ToString());res.Add(msg!);}return res;
}/// <summary>
/// 直播互動消息內容
/// </summary>
/// <param name="nickname">昵稱</param>
/// <param name="headUrl">頭像URL</param>
/// <param name="content">消息內容</param>
/// <param name="type">消息類型</param>
/// <param name="username">用戶ID</param>
/// <param name="clientMsgId">消息ID</param>
public record LiveMsg(string nickname,string headUrl,string content,int type,string username,string clientMsgId);

最后

這里介紹了評論的獲取方式,點贊和禮物的消息,可以通過類似的方式審查請求獲取到對應的內容。本文雖以互動直播為例,但主要為介紹如何使用.NET 的 WebView2 獲取請求的響應內容。如果你對這種互動直播感興趣可以通過 .NET 技術自己開發一個新的互動直播模式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281832.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281832.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281832.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2017年我的閱讀書單

2017年我正在看或者已經看完的書單&#xff0c;基本上都是紙質書&#xff0c;主要是長時間閱讀也不傷眼。由于現階段的主要工作是 DevOps 和運維管理&#xff0c;所以涉及運維方面的書我沒有再細看&#xff0c;如果是工作用到的話會稍為翻閱下。主要還是看運維開發和 Python 及…

web第6次作業position

position 屬性指定了元素的定位類型。 position 屬性的五個值&#xff1a; static &#xff08;靜態定位&#xff09; HTML元素的默認值&#xff0c;即沒有定位&#xff0c;元素出現在正常的流中。 靜態定位的元素不會受到 top, bottom, left, right影響。 div.stati…

GeneralUpdate版本更新公告20221009

大家好我是juster&#xff0c;GeneralUpdate的開源項目作者。這次將發布GeneralUpdate兼容.NET MAUI和多平臺為核心的版本。經過國慶假期的打磨修復了大量開源社區開發者的提交的bug和不合理修改建議&#xff0c;重構、刪除了大量代碼和結構使用和上一個版本沒有太大變化。1.更…

實驗2 java_《Java程序設計》實驗2

1、使用java語言編程&#xff0c;從鍵盤輸入N個整數存儲到數組中&#xff0c;求數組所有元素的和、最大值和平均值。import java.util.Scanner;public class Program01{public static void main(String [] args){Scanner scanner new Scanner(System.in);System.out.println(&…

WPF遍歷當前容器中某種控件的方法

原文:WPF遍歷當前容器中某種控件的方法版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 https://blog.csdn.net/m0_37591671/article/details/79528845 WPF遍歷當前容器中某種控件的方法 WPF遍歷當前容器中某種控件的方法1.目的&#xff1a;2.實現思…

gradle 轉 maven

1. 預備 1.1. java 環境 驗證 java -version   1.2. gradle 安裝&#xff0c; 參考&#xff0c; 這里列舉下windows下的安裝 b.1 下載包&#xff1a;https://gradle.org/releases b.2 解壓&#xff0c;例如放到D:\soft\gradle\gradle-3.5 b.3 添加到環境變量&#xff0c; 把D…

詳細的DedeCMS(織夢)目錄權限安全設置教程

一、目錄權限根據統計&#xff0c;絕大部分網站的攻擊都在根目錄開始的&#xff0c;因此&#xff0c;欄目目錄不能設置在根目錄。DEDECMS部署完成后&#xff0c;重點目錄設置如下&#xff1a;1&#xff09;將install刪除。2) data、templets、uploads、a或html目錄&#xff0c;…

java證書的安裝_Java 第三方證書安裝

1、進入dos命令行&#xff0c;進入目錄C:\Program Files (x86)\Java\jre6\lib\security&#xff0c;2、導入命令&#xff1a; keytool -import -keystore "C:\Program Files (x86)\Java\jre6\lib\security\cacerts" -storepass changeit -keypass changeit -alias em…

善用Object.defineProperty巧妙找到修改某個變量的準確代碼位置

2019獨角獸企業重金招聘Python工程師標準>>> 我今天的工作又遇到一個難題。前端UI右下角這個按鈕被設置為"禁用(disabled)"狀態。 這個按鈕的可用狀態由屬性enabled控制。我通過調試發現&#xff0c;一旦下圖第88行代碼執行完畢之后&#xff0c;這個按鈕的…

緩沖運動之框架開始一級簡單框架實例

***********************緩沖運動【框架開始】-1.html********************************************* <!DOCTYPE html> <html><head lang"en"><meta charset"UTF-8"><title></title><style type"text/css&qu…

將字符串分割為指定長度的子字符串

將一個字符串從左至右&#xff0c;分割成指定長度的子字符串&#xff08;注&#xff1a;最后一個子字符串的長度不一定等于指定的長度&#xff09; 1 #include <stdio.h>2 #include <string.h>3 4 #define STR_LENGTH 5 //分割之后每個字符串的長度&#xff08;最…

使用 C# 開發的輕量級開源數據庫 LiteDB

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具或組件&#xff0c;希望對您有用&#xff01;簡介 LiteDB 是一個小型、快速、輕量級的 .NET NoSQL 嵌入式數據庫&#xff0c;也就是我們常說的 K/V 數據庫&#xff0c;完全用 C# …

微信小程序仿微信SlideView組件slide-view

微信小程序仿微信SlideView組件。 使用 1、安裝 slide-view 從小程序基礎庫版本 2.2.1 或以上、及開發者工具 1.02.1808300 或以上開始&#xff0c;小程序支持使用 npm 安裝第三方包。 npm install --save miniprogram-slide-view2、在需要使用 slide-view 的頁面 page.json 中…

hibernate 環境搭建測試

對于hibernate的介紹&#xff0c;網絡上一搜一堆&#xff0c;恐怕我寫的也沒前輩總結的好。這個博主總結的十分好,方便大家欣賞 http://blog.csdn.net/liujiahan629629/article/details/21442607 真正要掌握&#xff0c;還得需要自己動手&#xff0c;才能豐衣足食。所需jar包j…

jQuary的相關動畫效果

第一種&#xff1a;該方法隱藏所有 <p> 元素&#xff1a; <html> <head> <script type"text/javascript" src"jquery.js"></script> <script type"text/javascript"> $(document).ready(function(){ $(&quo…

C# WPF 中使用 MahApps.Metro.IconPacks 提供的圖標

概述我們在桌面應用程序開發時經常會用到很多圖標&#xff0c;時常我是在阿里矢量圖庫下載&#xff1a;https://www.iconfont.cn/&#xff0c;然后存放多項目中去引用&#xff0c;不過這樣操作起來有點繁瑣&#xff0c;這節我們介紹一個更加便捷的方式.用法概述Wpf 圖標管理工具…

rails generator

generate 查找順序 rails/generators/initializer/initializer_generator.rb generators/initializer/initializer_generator.rbrails/generators/initializer_generator.rbgenerators/initializer_generator.rblib/templates/rails/helper/helper.rbcustomize your scaffold t…

java多線程同時運行_Java實現的兩個線程同時運行案例

本文實例講述了Java實現的兩個線程同時運行。分享給大家供大家參考&#xff0c;具體如下&#xff1a;/*** 兩個案例同時運行案例* 1:這個兩個線程并不是有規律的運行而是有沒有規律的交替運行*/package com.test3;public class Demo10_3 {/*** param args*/public static void …

通過幾個例子看sed的模式空間與保持空間

SED之所以能以行為單位的編輯或修改文本&#xff0c;其原因在于它使用了兩個空間&#xff1a;一個是活動的“模式空間&#xff08;pattern space&#xff09;”&#xff0c;另一個是起輔助作用的“暫存緩沖區&#xff08;holdingspace&#xff09;這2個空間的使用。 sed編輯器逐…

dotnet 用 SourceGenerator 源代碼生成技術實現中文編程語言

相信有很多伙伴都很喜歡自己造編程語言&#xff0c;在有現代的很多工具鏈的幫助下&#xff0c;實現一門編程語言&#xff0c;似乎已不是一件十分困難的事情。我利用 SourceGenerator 源代碼生成技術實現了一個簡易的中文編程語言&#xff0c;核心原理是將中文編程語言翻譯為 C#…