BaiduNetdiskリソースファインダー



Baidu Netdisk Resource Finder



1前に書く

最近、Baidu SkyDriveでいくつかのPDFリソースを検索し、BaiduSkyDriveリソースの検索専用の以前に保存したページを開きたいso.baiduyun.meページが長い間めくられて最終的に表示されましたが、エラー522が表示され、リンクが表示されます失敗しました。最後に、インターネットで使用可能なアドレスを見つけますhttp://pan.java1234.com/、このアドレスは確かにBaiduネットワークディスクリソースを検索できますが、非常に多くの広告があります。注意しないと、広告ページに入りますが、これは本当に迷惑です。その時、このウェブページでリソース検索アドレスを見つけて、このアドレスに基づいてリクエストをシミュレートし、クエリ結果を取得できるかどうか疑問に思いました。ブラウザのデバッグツールを開き、自由にキーワードを入力してクエリを実行し、クエリをクリックして分析します。分析の結果、URLリクエストはBaiduネットワークディスクの検索結果を正確に返し、データはjson形式であることがわかりました。これを見つけて検索結果のURLを取得するのは簡単です。 Winformインターフェイスを自分で完全に作成し、このURLを使用してリクエストをシミュレートし、結果を取得して、広告が表示されないようにすることができます。この一連のプロセスを完了する方法は次のとおりです。

2分析

2.1リクエストヘッダー情報を取得する

このプログラムを実装するための鍵は、Baiduネットワークディスクの検索結果のURLを取得する方法です。最初にこのページを開き、ブラウザのデバッグを開始してから、キーワードをランダムに入力して[クエリ]をクリックします。



2016_11_78518cbf-2d0b-4ada-8dbd-85236e20b1cf

上の図でわかるように、リクエストURLがあり、返される結果はページに表示された検索結果です。そのリクエストアドレスとリクエストヘッダー情報を確認できます。



2016_11_8ee7e19f-775f-44ba-907b-e1e480b0f03d

ヘッダーパネルを表示すると、リクエスト情報が次のようになっていることがわかります。

リクエストアドレス、ユーザーエージェント、ホスト、リファラーリクエストのヘッダー情報がわかれば、リソースを検索するリクエストを作成できます。それでは、リクエストアドレスの特性を分析してみましょう。このリクエストアドレスにはクエリパラメータhttp://pan.java1234.com/があり、以前に検索ボックスに入力されたキーワードはwin7であることがわかっているため、クエリパラメータで表される検索キーワードを特定できます。ブラウザでリクエストアドレスを開き、これらのクエリパラメータを変更して、これらのクエリパラメータの役割を分析できます。



分析後、リクエストアドレスのqパラメータは検索キーワードを表し、開始パラメータは検索ページを表し、合計10ページ、0は最初のページを表し、10は2番目のページを表し、...、90は10番目のページを表します。このページには最大100のリソース結果が表示され、最後の&_ = 1478436979649は削除できますが、リクエストには実質的な影響はありません。

2.2返された検索結果形式の分析

2.1節で分析した結果、検索結果のURLアドレスがわかったので、次のようにランダムに作成します。

q=win7

ブラウザに表示される効果は次のとおりです。

2016_11_3a923c28-8109-4561-8706-71fa6308cfc0

検索結果がjson文字列形式で返されることがわかります。返されるのはオブジェクトの配列で、各リソースオブジェクトにはhttp://pan1234.com/server3?jsoncallback=jQuery19109864917922941505_1478436979648&q=win7&start=0titlecontent 3つの属性が含まれています。

返されたjson形式の構造がわかっているので、c#で対応するクラスを作成し、jsonデータを前処理して、対応するオブジェクトに逆シリアル化できます。

3.プログラムの実装

プログラムを実装するためのキーコードは以下に掲載され、ソースコードはこの記事の最後にダウンロードできます。

3.1データエンティティクラス

unescapedUrl

3.2データ要求と前処理

public class SearchResult { public BDWPResource[] resources { get set } } public class BDWPResource { public string title { get set } public string content { get set } public string unescapedUrl { get set } }

3.3jsonデータ逆シリアル化オブジェクト

class HttpHelper { static readonly string urlTemplate = 'http://pan1234.com/server3?jsoncallback=jQuery191042552483269501273_1478315152726&q={0}&start={1}' public static SearchResult Requset(string key, string start) { string url = string.Format(urlTemplate, key, start) HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url) httpRequest.Accept = 'text/html,application/xhtml+xml,application/xmlq=0.9,image/webp,*/*q=0.8' httpRequest.UserAgent = 'Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' httpRequest.Host = 'pan1234.com' httpRequest.Referer = 'http://pan.java1234.com/result.jsp?wp=0&op=0&ty=gn&q=' + Uri.EscapeUriString(key) try { HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse() Stream s = httpResponse.GetResponseStream() StreamReader sr = new StreamReader(s) string jsonString = sr.ReadToEnd() string jsonProcessed = null if ((jsonProcessed = JsonPreProcessing(jsonString)) != null) { SearchResult searchResult = UtilityClass.GetObject(jsonProcessed) return searchResult } return null } catch { return null } } public static string JsonPreProcessing(string jsonString) { int startIndex = jsonString.IndexOf('(') if (startIndex > 0) { string json = jsonString.Substring(startIndex + 1) return '{'resources':' + json.Remove(json.Length - 3) + '}' } else { return null } } }

3.4インターフェース

インターフェイスのデザインは次のとおりです。

2016_11_288a1961-19b1-4f12-a93c-696d61bd9884

ネットワーク要求コードをタスクスレッドに入れて実行します。コードは次のように表示されます。

class UtilityClass { public static T GetObject<T>(string json) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)) MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)) T obj = (T)serializer.ReadObject(ms) return obj } }

3.5プログラム実行結果

2016_11_831ec578-b373-4660-97a5-81317b2ef478

2016_11_2a3aaa50-7efe-428e-82f0-c0e79111fcce

4結論

このプログラムの検索速度は遅い場合もあれば、速い場合もあります。通常、最初に検索をクリックしてから結果が得られるまでには時間がかかります。ネットワークの遅延がある可能性があります。ただし、しばらく検索結果が表示されない場合は、最初に検索を停止してから、クリックして検索を開始すると、検索結果が表示されます。

5リソース

ソースコードのダウンロードリンク: http://download.csdn.net/download/mingge38/9674694