├── .gitattributes ├── .gitignore ├── BiliBiliPlayerInfo.sln ├── BiliBiliPlayerInfo ├── BiliBiliPlayerInfo.csproj ├── Info.cs └── Properties │ └── AssemblyInfo.cs ├── LICENSE ├── README.md └── example ├── BilibiliPlayerInfo_Winform.zip └── pic.png /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | [Xx]64/ 19 | [Xx]86/ 20 | [Bb]uild/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | 85 | # Visual Studio profiler 86 | *.psess 87 | *.vsp 88 | *.vspx 89 | *.sap 90 | 91 | # TFS 2012 Local Workspace 92 | $tf/ 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | *.DotSettings.user 101 | 102 | # JustCode is a .NET coding add-in 103 | .JustCode 104 | 105 | # TeamCity is a build add-in 106 | _TeamCity* 107 | 108 | # DotCover is a Code Coverage Tool 109 | *.dotCover 110 | 111 | # NCrunch 112 | _NCrunch_* 113 | .*crunch*.local.xml 114 | nCrunchTemp_* 115 | 116 | # MightyMoose 117 | *.mm.* 118 | AutoTest.Net/ 119 | 120 | # Web workbench (sass) 121 | .sass-cache/ 122 | 123 | # Installshield output folder 124 | [Ee]xpress/ 125 | 126 | # DocProject is a documentation generator add-in 127 | DocProject/buildhelp/ 128 | DocProject/Help/*.HxT 129 | DocProject/Help/*.HxC 130 | DocProject/Help/*.hhc 131 | DocProject/Help/*.hhk 132 | DocProject/Help/*.hhp 133 | DocProject/Help/Html2 134 | DocProject/Help/html 135 | 136 | # Click-Once directory 137 | publish/ 138 | 139 | # Publish Web Output 140 | *.[Pp]ublish.xml 141 | *.azurePubxml 142 | 143 | # TODO: Un-comment the next line if you do not want to checkin 144 | # your web deploy settings because they may include unencrypted 145 | # passwords 146 | #*.pubxml 147 | *.publishproj 148 | 149 | # NuGet Packages 150 | *.nupkg 151 | # The packages folder can be ignored because of Package Restore 152 | **/packages/* 153 | # except build/, which is used as an MSBuild target. 154 | !**/packages/build/ 155 | # Uncomment if necessary however generally it will be regenerated when needed 156 | #!**/packages/repositories.config 157 | # NuGet v3's project.json files produces more ignoreable files 158 | *.nuget.props 159 | *.nuget.targets 160 | 161 | # Microsoft Azure Build Output 162 | csx/ 163 | *.build.csdef 164 | 165 | # Microsoft Azure Emulator 166 | ecf/ 167 | rcf/ 168 | 169 | # Microsoft Azure ApplicationInsights config file 170 | ApplicationInsights.config 171 | 172 | # Windows Store app package directory 173 | AppPackages/ 174 | BundleArtifacts/ 175 | 176 | # Visual Studio cache files 177 | # files ending in .cache can be ignored 178 | *.[Cc]ache 179 | # but keep track of directories ending in .cache 180 | !*.[Cc]ache/ 181 | 182 | # Others 183 | ClientBin/ 184 | [Ss]tyle[Cc]op.* 185 | ~$* 186 | *~ 187 | *.dbmdl 188 | *.dbproj.schemaview 189 | *.pfx 190 | *.publishsettings 191 | node_modules/ 192 | orleans.codegen.cs 193 | 194 | # RIA/Silverlight projects 195 | Generated_Code/ 196 | 197 | # Backup & report files from converting an old project file 198 | # to a newer Visual Studio version. Backup files are not needed, 199 | # because we have git ;-) 200 | _UpgradeReport_Files/ 201 | Backup*/ 202 | UpgradeLog*.XML 203 | UpgradeLog*.htm 204 | 205 | # SQL Server files 206 | *.mdf 207 | *.ldf 208 | 209 | # Business Intelligence projects 210 | *.rdl.data 211 | *.bim.layout 212 | *.bim_*.settings 213 | 214 | # Microsoft Fakes 215 | FakesAssemblies/ 216 | 217 | # GhostDoc plugin setting file 218 | *.GhostDoc.xml 219 | 220 | # Node.js Tools for Visual Studio 221 | .ntvs_analysis.dat 222 | 223 | # Visual Studio 6 build log 224 | *.plg 225 | 226 | # Visual Studio 6 workspace options file 227 | *.opt 228 | 229 | # Visual Studio LightSwitch build output 230 | **/*.HTMLClient/GeneratedArtifacts 231 | **/*.DesktopClient/GeneratedArtifacts 232 | **/*.DesktopClient/ModelManifest.xml 233 | **/*.Server/GeneratedArtifacts 234 | **/*.Server/ModelManifest.xml 235 | _Pvt_Extensions 236 | 237 | # LightSwitch generated files 238 | GeneratedArtifacts/ 239 | ModelManifest.xml 240 | 241 | # Paket dependency manager 242 | .paket/paket.exe 243 | 244 | # FAKE - F# Make 245 | .fake/ -------------------------------------------------------------------------------- /BiliBiliPlayerInfo.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BiliBiliPlayerInfo", "BiliBiliPlayerInfo\BiliBiliPlayerInfo.csproj", "{0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /BiliBiliPlayerInfo/BiliBiliPlayerInfo.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {0E6346A6-4C6F-4EFA-BFCF-6335CE7A7E1E} 8 | Library 9 | Properties 10 | BiliBiliPlayerInfo 11 | BiliBiliPlayerInfo 12 | v4.5.2 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 57 | -------------------------------------------------------------------------------- /BiliBiliPlayerInfo/Info.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Net; 7 | using System.IO; 8 | using System.Text.RegularExpressions; 9 | 10 | namespace BiliBiliPlayerInfo 11 | { 12 | //public class Info 13 | //{ 14 | // public static void Main(String[] args) 15 | // { 16 | // GetInfo info = new GetInfo(""); 17 | // Console.WriteLine("cid:" + info.getCid()); 18 | // Console.WriteLine("aid:" + info.getAid()); 19 | // Console.WriteLine("Title:" + info.getTitle()); 20 | // Console.WriteLine("keywords:" + info.getKeywords()); 21 | // Console.WriteLine("description:" + info.getDescription()); 22 | // Console.WriteLine("auther:" + info.getAuther()); 23 | // Console.WriteLine("autherID:" + info.getAutherID()); 24 | // Console.WriteLine("cover:" + info.getCover()); 25 | // Console.WriteLine("H5Player:" + info.getH5Player()); 26 | // Console.ReadKey(); 27 | // } 28 | //} 29 | 30 | public class Page 31 | { 32 | /// 33 | /// 返回页面的HTML代码 34 | /// 35 | /// URL 36 | /// HTML 37 | public static string GetHtml(string url) 38 | { 39 | string htmlCode; 40 | HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 41 | webRequest.Timeout = 30000; 42 | webRequest.Method = "GET"; 43 | webRequest.UserAgent = "Mozilla/4.0"; 44 | webRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); 45 | 46 | HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse(); 47 | //获取目标网站的编码格式 48 | string contentype = webResponse.Headers["Content-Type"]; 49 | Regex regex = new Regex("charset\\s*=\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase); 50 | if (webResponse.ContentEncoding.ToLower() == "gzip")//如果使用了GZip则先解压 51 | { 52 | using (System.IO.Stream streamReceive = webResponse.GetResponseStream()) 53 | { 54 | using (var zipStream = new System.IO.Compression.GZipStream(streamReceive, System.IO.Compression.CompressionMode.Decompress)) 55 | { 56 | //匹配编码格式 57 | if (regex.IsMatch(contentype)) 58 | { 59 | Encoding ending = Encoding.GetEncoding(regex.Match(contentype).Groups[1].Value.Trim()); 60 | using (StreamReader sr = new System.IO.StreamReader(zipStream, ending)) 61 | { 62 | htmlCode = sr.ReadToEnd(); 63 | } 64 | } 65 | else 66 | { 67 | using (StreamReader sr = new System.IO.StreamReader(zipStream, Encoding.UTF8)) 68 | { 69 | htmlCode = sr.ReadToEnd(); 70 | } 71 | } 72 | } 73 | } 74 | } 75 | else 76 | { 77 | using (System.IO.Stream streamReceive = webResponse.GetResponseStream()) 78 | { 79 | using (System.IO.StreamReader sr = new System.IO.StreamReader(streamReceive, Encoding.Default)) 80 | { 81 | htmlCode = sr.ReadToEnd(); 82 | } 83 | } 84 | } 85 | return htmlCode; 86 | } 87 | } 88 | 89 | public class GetInfo 90 | { 91 | 92 | private string av; 93 | private string url; 94 | private string strHTML; 95 | 96 | /// 97 | /// GetInfo 98 | /// 99 | /// av号 100 | public GetInfo(string av) 101 | { 102 | if (checkav(ref av)) 103 | { 104 | this.av = av; 105 | url = @"http://www.bilibili.com/av" + av; 106 | strHTML = Page.GetHtml(url); 107 | } 108 | else 109 | throw (new Exception("av号错误")); 110 | } 111 | 112 | /// 113 | /// 检查av号 114 | /// 115 | /// 116 | /// 117 | private bool checkav(ref string av) 118 | { 119 | String regex = @"^av[0-9]*$|^[0-9]*$"; 120 | av = Regex.Match(av, regex).ToString().Replace("av", ""); 121 | if (av == "") 122 | return false; 123 | else 124 | return true; 125 | } 126 | 127 | /// 128 | /// 获取Cid 129 | /// 130 | /// 131 | public string getCid() 132 | { 133 | string regex = @"cid=[0-9]*"; 134 | string cid = Regex.Match(strHTML, regex).ToString().Replace("cid=", ""); 135 | return cid; 136 | } 137 | 138 | /// 139 | /// 获取Aid 140 | /// 141 | /// 142 | public string getAid() 143 | { 144 | return av; 145 | } 146 | 147 | /// 148 | /// 获取播放页标题 149 | /// 150 | /// 151 | public string getTitle() 152 | { 153 | string regex = @".+"; 154 | Match title = Regex.Match(strHTML, regex); 155 | return title.ToString().Replace("", "").Replace("", ""); 156 | } 157 | 158 | /// 159 | /// 获取视频关键字 160 | /// 161 | /// 162 | public string getKeywords() 163 | { 164 | string regex = @""; 165 | Match keywords = Regex.Match(strHTML, regex); 166 | return keywords.ToString().Replace("", ""); 167 | } 168 | 169 | /// 170 | /// 获取视频描述 171 | /// 172 | /// 173 | public string getDescription() 174 | { 175 | string regex = @""; 176 | Match description = Regex.Match(strHTML, regex); 177 | return description.ToString().Replace("", ""); 178 | } 179 | 180 | /// 181 | /// 获取作者名 182 | /// 183 | /// 184 | public string getAuther() 185 | { 186 | string regex = @"card=\"".+?\"" "; 187 | Match auther = Regex.Match(strHTML, regex); 188 | return auther.ToString().Replace("card=","").Replace("\"", ""); 189 | } 190 | 191 | /// 192 | /// 获取作者ID 193 | /// 194 | /// 195 | public string getAutherID() 196 | { 197 | string regex = @"mid=\"".+?\"" "; 198 | Match autherID = Regex.Match(strHTML, regex); 199 | return autherID.ToString().Replace("mid=", "").Replace("\"", ""); 200 | } 201 | 202 | /// 203 | /// 获取封面 204 | /// 205 | /// 206 | public string getCover() 207 | { 208 | string regex = @" 214 | /// 获取Html5播放器地址 215 | /// 216 | /// 217 | public string getH5Player() 218 | { 219 | string url = "http://www.bilibili.com/html/html5player.html?aid=" + getAid() + "&cid=" + getCid(); 220 | return url; 221 | } 222 | } 223 | } 224 | -------------------------------------------------------------------------------- /BiliBiliPlayerInfo/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("BiliBiliPlayerInfo")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("BiliBiliPlayerInfo")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | //将 ComVisible 设置为 false 将使此程序集中的类型 18 | //对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("0e6346a6-4c6f-4efa-bfcf-6335ce7a7e1e")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, 33 | // 方法是按如下所示使用“*”: : 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 WILL_V 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BiliBiliPlayerInfo 2 | 该项目采集了BiliBili的视频播放页面的一些信息以便于调用 3 | ## 采集信息及函数 4 | ### GetInfo类 5 | * 构造函数参数为视频的av号 6 | * cid: getCid() 7 | * aid: getAid() 8 | * 播放页名: getTitle() 9 | * 关键字: getKeywords() 10 | * 视频描述: getDescription() 11 | * 作者: getAuther() 12 | * 作者ID: getAutherID() 13 | * 封面: getCover() 14 | * H5播放器地址: getH5Player() 15 | 16 | ### Page类 17 | * 获取网页HTML: GetHtml(string url) 18 | 19 | ## 类库及实例 20 | 使用Winform写了一个简单的输入av号返回信息的exe(原来是想写一个Bilibili桌面客户端,准备用Chromeium和H5播放器,结果dll不支持FFMPEG,除非重编译,我太懒了,太监了) 21 | 22 | [下载实例](https://github.com/WWILLV/BiliBiliPlayerInfo/blob/master/example/BilibiliPlayerInfo_Winform.zip) 23 | 24 | ![截图](https://github.com/WWILLV/BiliBiliPlayerInfo/blob/master/example/pic.png) 25 | 26 | [Release](https://github.com/WWILLV/BiliBiliPlayerInfo/releases) 27 | 28 | ## License 29 | [MIT](https://github.com/WWILLV/BiliBiliPlayerInfo/blob/master/LICENSE) -------------------------------------------------------------------------------- /example/BilibiliPlayerInfo_Winform.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WWILLV/BiliBiliPlayerInfo/934a5b4571f913f433cdad1798be9e2794030454/example/BilibiliPlayerInfo_Winform.zip -------------------------------------------------------------------------------- /example/pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WWILLV/BiliBiliPlayerInfo/934a5b4571f913f433cdad1798be9e2794030454/example/pic.png --------------------------------------------------------------------------------