Exemple #1
0
 public static function parseImages($data)
 {
     if (!$data || !isset($data['url']) || !isset($data['type'])) {
         return self::_err('param not enough ~~');
     }
     if ($data['type'] != 2) {
         return self::_err('just handle type => 2( website need to parse to get images) ~~');
     }
     $url = $data['url'];
     $host = parse_url($url, PHP_URL_HOST);
     if (!$host) {
         return self::_err('no host');
     }
     $content = HttpClient::get($url);
     switch ($host) {
         case "www.18weixin.com":
             $content = mb_convert_encoding($content, 'gb2312', 'utf-8');
             $html_dom = new \HtmlParser\ParserDom($content);
             $tmp_images_wrap = $html_dom->find('div.picadd', 0);
             foreach ($tmp_images_wrap->find("img") as $tmp_image_target) {
                 $tmp_target_url = $tmp_image_target->getAttr("src");
                 if (!$tmp_target_url) {
                     continue;
                 }
                 if (substr($tmp_target_url, 0, 4) != "http") {
                     $tmp_target_url = "http://" . $host . $tmp_target_url;
                 }
                 self::addQueue(['url' => $tmp_target_url, 'type' => 1]);
             }
             break;
     }
     return true;
 }
Exemple #2
0
 public function actionLrc()
 {
     $song_id = intval($this->post("song_id", 0));
     if (!$song_id) {
         return $this->renderJSON([], "歌曲不存在", -1);
     }
     $info = Music::findOne(['song_id' => $song_id, 'status' => 1]);
     if (!$info) {
         return $this->renderJSON([], "歌曲不存在", -1);
     }
     /*获取歌词*/
     $lrc_url = QQMusicService::getSongLrcUrl($song_id);
     $lrc_data = HttpClient::get($lrc_url);
     $lrc = '';
     if (substr($lrc_data, 0, 5) == "<?xml") {
         if (stripos(strtolower($lrc_data), 'encoding="GB2312"') !== false) {
             $lrc_data = mb_convert_encoding($lrc_data, "utf-8", "gb2312");
             $lrc_data = str_replace('encoding="GB2312"', 'encoding="utf-8"', $lrc_data);
         }
         //var_dump($lrc_data);exit();
         $parser = xml_parser_create();
         xml_parse_into_struct($parser, $lrc_data, $values, $index);
         //解析到数组
         xml_parser_free($parser);
         $lrc = isset($values[0]['value']) ? $values[0]['value'] : '';
     }
     $data = ['lrc' => $lrc, 'song_url' => QQMusicService::getSongUrl($song_id)];
     return $this->renderJSON($data);
 }
Exemple #3
0
    public function actionIframe()
    {
        $url = $this->get("url", "");
        $width = $this->get("width", 300);
        $data = HttpClient::get($url);
        header("Content-type: text/html; charset=utf-8");
        echo <<<EOT
<pre class='iframe_bug' style='word-wrap: break-word; white-space: pre-wrap;width:{$width}px;'>{$data}</pre>
EOT;
        exit;
    }
 public function actionKeywords($param_date = 'Today')
 {
     $date = date('Y-m-d', strtotime($param_date));
     if ($this->checkHasFileByDate(2, $date)) {
         return $this->echoLog("has file,date:{$date} ");
     }
     $cookie = $this->getAuthCookie(2);
     $url = "https://web.umeng.com/main.php?c=traf&a=keyword&ajax=module=report&siteid=1259302647&st={$date}&et={$date}&tabIndex=1&keywordCondType=&keyword=&itemName=&itemNameType=&itemVal=&engin=all&orderBy=pv&orderType=-1&currentPage=1&pageType=90&downloadType=csv";
     HttpClient::setCookie($cookie);
     $ret = HttpClient::get($url);
     if (!$ret) {
         $this->echoLog(HttpClient::getLastErrorMsg());
         return;
     }
     $params = ['type' => 2, 'action' => 1, 'date' => $date];
     $this->save2File("keywordlist_umeng_{$date}_" . date("YmdHis") . ".csv", $ret, $params);
 }
Exemple #5
0
 /**
  * 每天运行一次就ok了
  * php yii emoticon/scrapy/weixin18
  */
 public function actionWeixin18($page = 1)
 {
     $host = 'http://www.18weixin.com';
     $url = $host . '/weixinbiaoqing_%s.shtml';
     $url = sprintf($url, $page);
     $content = HttpClient::get($url);
     $content = mb_convert_encoding($content, 'gb2312', 'utf-8');
     $html_dom = new \HtmlParser\ParserDom($content);
     $img_wrap_array = $html_dom->find('div.imgborder_bqimg_width');
     if (!$img_wrap_array) {
         return $this->echoLog("error:no img tag ~~");
     }
     foreach ($img_wrap_array as $_item) {
         $tmp_target_url = $_item->find("a", 0);
         $tmp_target_url = $host . $tmp_target_url->getAttr("href");
         EmoticonService::addQueue(['url' => $tmp_target_url, 'type' => 2]);
     }
     return $this->echoLog("it's over ~~");
 }
Exemple #6
0
 public function actionKeywords($param_date = 'Today')
 {
     $date = date('Y-m-d', strtotime($param_date));
     if ($this->checkHasFileByDate(1, $date)) {
         //return $this->echoLog("has file,date:{$date} ");
     }
     $cookie = $this->getAuthCookie(1);
     $url = "http://zhanzhang.baidu.com/keywords/keywordlist?site=http%3A%2F%2Fwww.vincentguo.cn%2F&range={$date}&download=true&searchItem=";
     HttpClient::setCookie($cookie);
     $ret = HttpClient::get($url);
     if (stripos($ret, 'Too many downloads') !== false) {
         //错误了
         $this->echoLog($ret);
         return;
     }
     if (!$ret) {
         $this->echoLog(HttpClient::getLastErrorMsg());
         return;
     }
     $params = ['type' => 1, 'action' => 1, 'date' => $date];
     $this->save2File("keywordlist_bd_{$date}_" . date("YmdHis") . ".csv", $ret, $params);
 }
Exemple #7
0
 public static function getMusicInfoById($song_ids = [])
 {
     $ret = [];
     $url = "http://music.baidu.com/data/music/links?songIds=%s";
     $url = sprintf($url, implode(",", $song_ids));
     $res = HttpClient::get($url);
     $res = @json_decode($res, true);
     if ($res && isset($res['data']) && $res['data']) {
         $songs = $res['data']['songList'];
         if ($songs) {
             foreach ($songs as $_song) {
                 $tmp_lrc_link = str_replace("http://qukufile2.qianqian.com/data2/pic/", "", $_song['lrcLink']);
                 $tmp_lrc_link = str_replace("http://c.hiphotos.baidu.com/ting/pic/item/ ", "", $tmp_lrc_link);
                 if (stripos($tmp_lrc_link, "http") === false) {
                     $_song['lrcLink'] = "http://qukufile2.qianqian.com" . $tmp_lrc_link;
                 }
                 if (self::saveMusic($_song)) {
                     $ret[] = $_song;
                 }
             }
         }
     }
     return $ret;
 }
Exemple #8
0
 public static function getSongInfo($song_id)
 {
     $ret = [];
     $url = "http://s.plcloud.music.qq.com/fcgi-bin/fcg_list_songinfo.fcg?idlist=%s&callback=jsonCallback&url=1";
     $url = sprintf($url, $song_id);
     $data_jsonp = trim(HttpClient::get($url));
     $data_json = mb_substr($data_jsonp, 13, -1);
     $find = ['code:', 'data:', 'url:', 'url1:'];
     $replace = ['"code":', '"data":', '"url":', '"url1":'];
     $data_json = str_replace($find, $replace, $data_json);
     $data = @json_decode($data_json, true);
     if ($data && isset($data['code']) && $data['code'] == 0) {
         $song_attr_f = explode("|", $data['data'][$song_id]);
         if (isset($song_attr_f[4])) {
             $tmp_song_id = $song_attr_f[0];
             $tmp_img_id = $song_attr_f[4];
             $tmp_mid = $song_attr_f[20];
             $ret = ['song_id' => $tmp_song_id, 'type' => 2, 'cover_image' => self::getCoverImageUrl($tmp_img_id), "lrc" => "", "song_url" => self::getSongUrl($tmp_song_id, ".mp3"), "song_title" => $song_attr_f[1], "song_author" => $song_attr_f[3], "text" => $data, "format_data" => ['image_id' => $tmp_img_id, 'mid' => $tmp_mid], "status" => 1, "view_url" => UrlService::buildGameUrl("/music/info", ['song_id' => $tmp_song_id])];
         }
     }
     return $ret;
 }
Exemple #9
0
 public static function getGeoByIP($ip)
 {
     $ak = self::getAK();
     $url = "https://api.map.baidu.com/highacciploc/v1?qcip={$ip}&qterm=pc&ak={$ak}&coord=bd09ll";
     var_dump(HttpClient::get($url));
 }
Exemple #10
0
 /**
 * http://www.mca.gov.cn/article/sj/tjbz/a/2016/20161031/201610311102.html
 * http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201608/t20160809_1386477.html
 * 抓取省市区,抓取之后的数据结构如下
 * [
 * 		'province_id' => [
 * 			'id' => '',
 * 			'name' = >'',
 * 			'city_list' => [
 * 				'city_id' => [
 * 					'id' => '',
 * 					'name' => ''
 * 				]
 * 			],
 * 			'district_list' => [
 * 				'city_id' => [
 * 						'district_id' => [
 * 						'id' => '',
 * 						'name' => ''
 * 					]
 * 				]
 * 			]
 * 		]
 * ]
 * php yii report/grab/mac
 *
 */
 public function actionMca()
 {
     $url = "http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201608/t20160809_1386477.html";
     $content = HttpClient::get($url);
     $html_dom = new \HtmlParser\ParserDom($content);
     $target = $html_dom->find('p.MsoNormal');
     if (!$target) {
         return $this->echoLog("error:no table tag ~~");
     }
     $ret = [];
     foreach ($target as $_item_target) {
         $tmp_td_array = $_item_target->find("span");
         if (!$tmp_td_array || count($tmp_td_array) < 3) {
             continue;
         }
         $tmp_id = $tmp_td_array[0]->getPlainText();
         $tmp_title = trim($tmp_td_array[2]->getPlainText());
         $tmp_title = strip_tags($tmp_title);
         $tmp_title = trim($tmp_title, "    ");
         //$this->echoLog($tmp_id.":".$tmp_title);
         if (substr($tmp_id, 2, 4) == "0000") {
             //省
             $ret[$tmp_id] = ['id' => $tmp_id, 'name' => $tmp_title, 'city_list' => [], 'district_list' => []];
             continue;
         }
         if (substr($tmp_id, 4, 2) == "00") {
             //市
             $tmp_province_id = substr($tmp_id, 0, 2) . "0000";
             if (!isset($ret[$tmp_province_id])) {
                 $this->echoLog("error");
                 exit;
             }
             $ret[$tmp_province_id]['city_list'][$tmp_id] = ['id' => $tmp_id, 'name' => $tmp_title];
             continue;
         }
         //区
         $tmp_province_id = substr($tmp_id, 0, 2) . "0000";
         $tmp_city_id = substr($tmp_id, 0, 4) . "00";
         if (!isset($ret[$tmp_province_id])) {
             $this->echoLog("error");
             exit;
         }
         //这种情况就是直辖市,自己新生成一个市
         if (!isset($ret[$tmp_province_id]['city_list'][$tmp_city_id])) {
             $ret[$tmp_province_id]['city_list'][$tmp_city_id] = ['id' => $tmp_city_id, 'name' => $ret[$tmp_province_id]['name']];
         }
         $ret[$tmp_province_id]['district_list'][$tmp_city_id][$tmp_id] = ['id' => $tmp_id, 'name' => $tmp_title];
     }
     foreach ($ret as $_item) {
         $tmp_province_id = $_item['id'];
         $tmp_province_name = $_item['name'];
         $tmp_params = ['id' => $tmp_province_id, 'province_id' => $tmp_province_id, 'province_name' => $tmp_province_name];
         $this->setMapCityItem($tmp_params);
         if (!$_item['city_list']) {
             continue;
         }
         foreach ($_item['city_list'] as $_city_id => $_city_info) {
             $tmp_params = ['id' => $_city_id, 'province_id' => $tmp_province_id, 'province_name' => $tmp_province_name, 'city_id' => $_city_id, 'city_name' => $_city_info['name']];
             $this->setMapCityItem($tmp_params);
             if (!$_item['district_list'] || !isset($_item['district_list'][$_city_id])) {
                 continue;
             }
             $tmp_district_list = $_item['district_list'][$_city_id];
             foreach ($tmp_district_list as $_district_info) {
                 $tmp_params = ['id' => $_district_info['id'], 'province_id' => $tmp_province_id, 'province_name' => $tmp_province_name, 'city_id' => $_city_id, 'city_name' => $_city_info['name'], 'district_id' => $_district_info['id'], 'district_name' => $_district_info['name']];
                 $this->setMapCityItem($tmp_params);
             }
         }
     }
 }
Exemple #11
0
 public function actionToken()
 {
     $this->setWeixinConfig();
     $code = $this->get("code", "");
     $state = $this->get("state", "");
     if (!$code) {
         return $this->goHome();
     }
     $appid = $this->appid;
     $appsecret = $this->appsecret;
     $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $appsecret . "&code=" . $code . "&grant_type=authorization_code";
     $ret = HttpClient::get($url, []);
     $data = @json_decode($ret, true);
     if (empty($data) || isset($data['errcode'])) {
         return $this->goHome();
     }
     $openid = $data['openid'];
     $sns_user_data = [];
     if ($data['scope'] == "snsapi_userinfo") {
         $url = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $data['access_token'] . "&openid={$openid}&lang=zh_CN";
         $ret = HttpClient::get($url, []);
         $sns_user_data = @json_decode($ret, true);
     }
     /*特殊处理*/
     $state = str_replace("@@", "&", urldecode($state));
     $state = str_replace("@|@", "?", urldecode($state));
     /*微信url特殊参数处理*/
     $state = str_replace("from=groupmessage", "", $state);
     $state = str_replace("isappinstalled=0", "", $state);
     $state = str_replace("connect_redirect=", "", $state);
     $state = rtrim($state, "?");
     $state = rtrim($state, "&");
     /*看看有没有owid:公众号wx opendid*/
     $woid = '';
     $question_mark_idx = stripos($state, "?");
     if ($question_mark_idx !== false) {
         $parse_str = mb_substr($state, $question_mark_idx + 1);
         parse_str($parse_str, $get_params);
         if (isset($get_params['woid'])) {
             $woid = $get_params['woid'];
         }
     }
     $reg_bind = UserOpenidUnionid::findOne(["openid" => $openid]);
     if (!$reg_bind) {
         $date_now = date("Y-m-d H:i:s");
         $unique_name = md5($openid);
         $user_info = User::findOne(['unique_name' => $unique_name]);
         if (!$user_info) {
             $model_user = new User();
             if ($sns_user_data) {
                 $model_user->nickname = $sns_user_data['nickname'];
                 $model_user->avatar = $sns_user_data['headimgurl'];
             } else {
                 $model_user->nickname = "微信用户" . substr($openid, -10);
             }
             $model_user->unique_name = $unique_name;
             $model_user->updated_time = $date_now;
             $model_user->created_time = $date_now;
             $model_user->save(0);
             $user_info = $model_user;
         }
         $model_bind = new UserOpenidUnionid();
         $model_bind->uid = $user_info['uid'];
         $model_bind->openid = $openid;
         $model_bind->unionid = '';
         $model_bind->other_openid = $woid;
         $model_bind->updated_time = $date_now;
         $model_bind->created_time = $date_now;
         $model_bind->save(0);
         $reg_bind = $model_bind;
     } else {
         $user_info = User::findOne(['uid' => $reg_bind['uid']]);
     }
     if ($sns_user_data && (stripos("微信用户", $user_info['nickname'] !== false) || !$user_info['avatar'])) {
         $user_info->nickname = $sns_user_data['nickname'];
         $user_info->avatar = $sns_user_data['headimgurl'];
         $user_info->update(0);
     }
     if ($woid && !$reg_bind['other_openid']) {
         //为了修复以前的数据
         $reg_bind->other_openid = $woid;
         $reg_bind->update(0);
     }
     $this->createLoginStatus($user_info);
     $url = $state ? $state : UrlService::buildWapUrl("/default/index");
     return $this->redirect($url);
 }