当前位置: 首页 > 工具软件 > ShortUrlApi > 使用案例 >

php short url,tcn.php · Ufec/shortUrlApi - Gitee.com

徐丰茂
2023-12-01

/**

* @author ufec blog@ufec.cn

* @copyright Ufec

* @link https://github.com/ufec/shortUrlApi

* @version 1.0

*/

header("Content-Type:text/json; charset=utf-8");

class Url

{

private $cookie = '';

private $source = "209678993";

private $userId = "2735327001";//微博安全中心

private $headers = [

"Host: api.weibo.com",

"Referer: https://api.weibo.com/chat/",

"Connection: keep-alive",

"Pragma: no-cache",

"Cache-Control: no-cache",

"Accept: application/json, text/plain, */*",

"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36",

"Sec-Fetch-Site: same-origin",

"Sec-Fetch-Mode: cors",

"Sec-Fetch-Dest: empty",

"Accept-Encoding: gzip, deflate, br",

"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",

];

public function __construct()

{

if (!$this->cookie) {

$readCookieFile = @file_get_contents('weiboCookie.txt');

if (!$readCookieFile) {

die("未找到weiboCookie文件或weiboCookie文件为空");

}

$this->cookie = $readCookieFile;

}

echo $this->sendMsg("https://www.ufec.cn");

}

// 获取消息列表

private function getContactsJson()

{

$api = "https://api.weibo.com/webim/2/direct_messages/contacts.json?special_source=3&add_virtual_user=3,4&is_include_group=0&need_back=0,0&count=50&source=209678993&t=".time()*1000;

$header = $this->headers;

$header[] = "Cookie:" . $this->cookie;

$params = [

'header' => $header,

];

$json = $this->curl($api, 'GET', $params);

$data = json_decode($json, 1);

if (!array_key_exists('contacts', $data)) {

return $this->returnMsg($data['error_code'], $data['error'], "empty");

}

$res = array();

for ($i=0; $i < count($data['contacts']); $i++) {

if (array_key_exists('idstr', $data['contacts'][$i]['user'])) {

if ($data['contacts'][$i]['user']['idstr'] == $this->userId) {

$res = $data['contacts'][$i];

}

}

}

if (!$res) {

return $this->returnMsg(000, "你未关注此人或未给他发消息", "empty");

}

if(!array_key_exists( "clientid", $res['message']['ext_text']) || !$res['message']['ext_text']['clientid']){

return $this->returnMsg(000, "与此人没有消息往来,无法获取会话id", "empty");

}

$clientid = $res['message']['ext_text']['clientid'];

file_put_contents("contacts.txt", $clientid);

return $clientid;

}

/**

* @param string $text 要生成的链接

* @access private

* @return string

*/

private function sendMsg($text)

{

$api = "https://api.weibo.com/webim/2/direct_messages/new.json";

if(!file_exists('contacts.txt') || !file_get_contents('contacts.txt')){

$clientid = $this->getContactsJson();

}else {

$clientid = file_get_contents('contacts.txt');

}

$header = $this->headers;

array_push($header, "Cookie:" . $this->cookie, "Content-Type: application/x-www-form-urlencoded");

$postData = [

'text' => $text,

'uid' => $this->userId,

'extensions' => '{"clientid":"'.$clientid.'"}',

'is_encoded' => 0,

'decodetime' => 1,

'source' => $this->source,

];

$str = http_build_query($postData);

$params = [

'header' => $header,

'postData' => $str,

];

$json = $this->curl($api, 'POST', $params);

$data = json_decode($json, 1);

//系统内置错误

if(array_key_exists('error_code' , $data) && array_key_exists('error' , $data)){

return $this->returnMsg($data['error_code'], $data['error'], "empty");

}

//其他未知错误

if (!array_key_exists('id', $data) || !array_key_exists('recipient_id', $data) || $data['recipient_id'] != $this->userId) {

return $this->returnMsg(001, "发送失败", "empty");

}

$id = $data['id'];

$returnData = [

'short_url' => $data['text'],

['long_url' => $text]

];

if(!$this->recallMsg($id)){

return $this->returnMsg(002, "生成成功,消息撤回失败", $returnData);

}

return $this->returnMsg(0, "生成成功,消息撤回成功", $returnData);

}

/**

* @param int|string $id 消息id

* @access private

* @return bool

*/

private function recallMsg($id)

{

$api = "https://api.weibo.com/webim/2/direct_messages/recall.json";

$header = $this->headers;

array_push($header, "Cookie:" . $this->cookie, "Content-Type: application/x-www-form-urlencoded");

$postData = [

'id' => $id,

'source' => $this->source,

];

$params = [

'header' => $header,

'postData' => http_build_query($postData),

];

$json = $this->curl($api, 'POST', $params);

$data = json_decode($json, 1);

if (!array_key_exists('id', $data) || !array_key_exists('text', $data)) {

return false;

}

return true;

}

private function curl($url, $method='GET', $params=array(), $getinfo=false)

{

$header = array();

if(isset($params["header"])){

$header = array_merge($header,$params["header"]);

}

$user_agent = empty($params["ua"]) ? 0 : $params["ua"] ;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

if($params["ref"]){

curl_setopt($ch, CURLOPT_REFERER, $params["ref"]);

}

if (array_key_exists('responseHeader', $params) && $params['responseHeader']) {

curl_setopt($ch, CURLOPT_HEADER, true);

curl_setopt($ch, CURLOPT_NOBODY, true);

}else {

curl_setopt($ch, CURLOPT_NOBODY, false);

}

curl_setopt($ch, CURLOPT_USERAGENT,$user_agent);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);

curl_setopt($ch, CURLOPT_TIMEOUT, 3600);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_AUTOREFERER, true);

curl_setopt($ch, CURLOPT_ENCODING, '');

if($method == 'POST'){

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $params["postData"]);

}

$res = curl_exec($ch);

if ($getinfo) {

$data = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);

}else {

$data = $res;

}

curl_close($ch);

return $data;

}

private function returnMsg($code, $msg, $data)

{

return json_encode(['code'=>$code, 'msg'=>$msg, 'data'=>$data], JSON_UNESCAPED_UNICODE);

}

}

new Url();

一键复制

编辑

Web IDE

原始数据

按行查看

历史

 类似资料:

相关阅读

相关文章

相关问答