소개:
분석 인터페이스는 기사 읽기 및 좋아요 수를 얻으려면 키와 uin이라는 두 가지 주요 매개변수가 있어야 함을 알고 있습니다. 키는 공개 계정마다 다릅니다. (유니버셜 위챗 키가 있다고 하는데 어떻게 얻는지 모르겠어요) 같은 공식 계정 키는 30분 정도 지나면 만료됩니다
링크를 제출하면 기사 읽기 API를 받을 수 있습니다
관련 학습 권장 사항: php 프로그래밍 (동영상)
생각:
1 읽기 인터페이스에 대한 클라이언트의 요청을 가로채서 자체 서버로 전달하면 키를 얻고 __biz 연결 캐시를 사용할 수 있습니다. 30분 동안
2. 쿼리를 위해 기사 링크를 제출하면 서버는 기사 링크 Get __biz에서 기사 링크를 검색하고 현재 공개 계정에 해당하는 키가 캐시되어 있는지 확인합니다. 3단계로 진행합니다. 그렇지 않은 경우 4단계로 진행하세요.
3.curl은 데이터를 얻기 위해 https://mp.weixin.qq.com/mp/getappmsgext? 인터페이스를 요청합니다.
4. 키가 존재하지 않으면 클라이언트에 URL로 리디렉션하도록 알립니다(websocket 알림을 사용하여 알립니다). 또는 클라이언트 Ajax 폴링의 경우 기사 세부 정보 페이지의 코드를 수정하여 기사 페이지를 연 후 몇 초마다 중간 페이지로 다시 이동하도록 수정해야 합니다. ) 클라이언트가 키를 업데이트할 때까지 몇 초간 프로그램을 일시 중지합니다. 이때 클라이언트는 새 키를 제출하고 이를 쿼리
implementation
1. 이 인터페이스는 읽기 볼륨을 얻기 위한 인터페이스입니다.
2. 이 인터페이스를 사용하면 자체 서버로 전달됩니다. 규칙 사용자 정의를 클릭하세요.
if (oSession.fullUrl.Contains("mp.weixin.qq.com/mp/getappmsgext")) { oSession.oRequest["Host"]= 'ccc.aaa.com' ; }
OnBeforeRequest(정식 요청 이전에 실행된 함수)에 영향을 미치면 이 인터페이스가 전달된 것을 볼 수 있습니다
3. 서버 캐시 키, 코드는 PHP를 예로 사용합니다
public function saveKey(Request $request) { $__biz = $request->param('__biz',0); $data['uin'] = $request->param('uin',0); $data['key'] = $request->param('key',0); Cache::set($__biz,$data,30 * 60); return 'ok'; }
4. API 코드를 쿼리하세요
public function getReadNum(Request $request) { $url = $request->param('url'); parse_str(parse_url($url)['query'], $param); $__biz = $param['__biz']; $key_data = Cache::get($__biz); if (empty($key_data)) return 'no key'; $uin = $key_data['uin']; $key = $key_data['key']; $param['uin'] = $uin; $param['key'] = $key; $param['wxtoken'] = "777"; $wechat_url = "https://mp.weixin.qq.com/mp/getappmsgext?" . http_build_query($param); //dump($wechat_url); $data = array( 'is_only_read' => 1, 'is_temp_url' => 0, 'appmsg_type' => 9, ); $res = $this->get_url($wechat_url,$data); return $res; } function get_url($url,$data) { $ifpost = 1;//是否post请求 $datafields = $data;//post数据 $cookiefile = '';//cookie文件 $cookie = '';//cookie变量 $v = false; //模拟http请求header头 $header = array("Connection: Keep-Alive","Accept: text/html, application/xhtml+xml, */*", "Pragma: no-cache", "Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3","User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 QBCore/4.0.1278.400 QQBrowser/9.0.2524.400 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2875.116 Safari/537.36 NetType/WIFI MicroMessenger/7.0.5 WindowsWechat"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $v); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $ifpost && curl_setopt($ch, CURLOPT_POST, $ifpost); $ifpost && curl_setopt($ch, CURLOPT_POSTFIELDS, $datafields); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $cookie && curl_setopt($ch, CURLOPT_COOKIE, $cookie);//发送cookie变量 $cookiefile && curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);//发送cookie文件 $cookiefile && curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);//写入cookie到文件 curl_setopt($ch,CURLOPT_TIMEOUT,60); //允许执行的最长秒数 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $ok = curl_exec($ch); curl_close($ch); unset($ch); return $ok; }
5. 페이지를 리디렉션하도록 클라이언트에 알립니다. (이 부분은 작성되지 않았습니다. 텍스트 소켓에 대한 다른 기사를 참조하세요.)
6. Fiddler를 사용하여 WeChat 기사 및 jsj 스크립트를 수정합니다.
In OnBeforeResponse (클라이언트로 돌아오기 전에 실행한 메소드), 중간 페이지로 이동하는 코드 추가
The effect
관련 학습 권장 사항:프로그래밍 동영상
위 내용은 PHP+fiddler를 사용하여 패킷을 캡처하고 WeChat 기사의 읽기 및 좋아요 수를 수집하는 아이디어에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!