/**
*「ICトレーディングネットワーク」サプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-6 10:44:32$
* 注: 「IC Trading Network」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic {
プライベート$キー; // 型号
プライベート $pageNum; // 页码
/**
※エントリー手順
*/
パブリック関数 go($key) {
$this->key = $key;
$this->pageNum = $this->getPageNum();
$this->getInfo();
}
/**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
*/
プライベート関数 getInfo() {
if ($this->pageNum==1) { # 处理只有一页的情况
$arr = $this->shopUrlMatchReArr($this->getContent());
$this->isAddSuccess($arr);
} elseif ($this->pageNum>1) { # 多页
for ($i=1; $i<=$this->pageNum; $i++) {
$arr = $this->shopUrlMatchReArr($this->getContent($i));
$this->isAddSuccess($arr);
}
}
}
/**
* 追加が成功したかどうかを出力します
* @param ArrayObject $arr
* @戻り文字列
*/
プライベート関数 isAddSuccess($arr) {
foreach ($arr as $k=>$v) {
if ($this->execAdd($this->getInfoByShopUrl($v))) {
echo '追加成功!!';
} その他 {
echo '追加に失敗しました!!';
}
}
}
/**
* データベースへの追加を実行
* @param ArrayObject $infoArr
* @return Number 影響を受ける行の数
*/
プライベート関数 execAdd($infoArr) {
$mysqli = $this->getDb();
if (!emptyempty($infoArr['company'])) {
if (!$this->isExists($mysqli, $infoArr)) {
$num = $mysqli->query("INSERT INTO ic(company,address,phone,mobile,fax,zip,person,qq,msn,email,website,regDate,shopUrl) VALUES ('{$infoArr['company ']}'、'{$infoArr['アドレス']}'、'{$infoArr['電話']}'、'{$infoArr['モバイル']}'、'{$infoArr['ファックス'] }','{$infoArr['zip']}','{$infoArr['person']}','{$infoArr['qq']}','{$infoArr['msn']}' ,'{$infoArr['email']}','{$infoArr['website']}','{$infoArr['regDate']}','{$infoArr['shopUrl']}')" );
$num を返します。
} その他 {
false を返します。 #表示数据已经存在
}
} その他 {
false を返します。
}
}
/**
* データベースに接続します
*/
プライベート関数 getDb() {
$mysqli = new mysqli('localhost', 'root', '1715544', 'weiku');
$mysqli->query('SET NAMES GB2312');
$mysqli を返します。
}
/**
* 会社がすでに存在するかどうかを確認してください
* @param リソース $mysqli
* @param ArrayObject $infoArr
* @return bool
*/
プライベート関数 isExists($mysqli, $infoArr) {
$mysqli->query("SELECT company FROM ic WHERE company = '{$infoArr['company']}'");
if ($mysqli->affected_rows) {
true を返します。
} その他 {
false を返します。
}
}
/**
* フォーマット文字列
* @param 文字列 $str
* @戻り文字列
*/
プライベート関数 formatString($str) {
トリム($str)を返します;
}
/**
*情報を入手
* @param $url
* @return ArrayObject
*/
プライベート関数 getInfoByShopUrl($url) {
$re = $this->getUrlInfo($url);
if (stristr($re, '')) $re = preg_replace('/.*/Usi', ' '、$re);
preg_match_all('/
preg_match_all('/地址:(.*)/Usi', $re, $addressArr);
preg_match_all('/電话:(.*)/Usi', $re, $phoneArr);
preg_match_all('/手机:(.*)/Usi', $re, $mobileArr);
preg_match_all('/传真:(.*)/Usi', $re, $faxArr);
preg_match_all('/邮编:(.*)/Usi', $re, $zipArr);
preg_match_all('/联系人:(.*)/Usi', $re, $personArr);
preg_match_all('/QQ:(.*)/Usi', $re, $qqArr);
preg_match_all('/MSN:(.*)/Usi', $re, $msnArr);
preg_match_all('/Email:(.*)/Usi', $re, $emailArr);
preg_match_all('/网址:(.*)/Usi', $re, $websiteArr);
preg_match_all('/注册日期:(.*)/Usi', $re, $regDateArr);
$infoArr = array(
'company'=>$this->formatString($companyArr[1][0]),
'address'=>$this->formatString($addressArr[1][0]),
'phone'=>$this->formatString($phoneArr[1][0]),
'mobile'=>$this->formatString($mobileArr[1][0]),
'fax'=>$this->formatString($faxArr[1][0]),
'zip'=>$this->formatString($zipArr[1][0]),
'person'=>$this->formatString($personArr[1][0]),
'qq'=>$this->formatString($qqArr[1][0]),
'msn'=>$this->formatString($msnArr[1][0]),
'email'=>$this->formatString($emailArr[1][0]),
'website'=>$this->stripATags($this->formatString($websiteArr[1][0])),
'regDate'=>$this->formatString($regDateArr[1][0]),
'shopUrl'=>$url
);
$infoArr を返します。
}
/**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
*/
プライベート関数 shopUrlMatchReArr($re) {
preg_match_all('/.+/Usi', $re, $arr);
$arr = $this->formatUrlArr(array_unique($arr[1]));
$arr を返します。
}
/**
* 配列のフォーマット
* @param 配列 $arr
* @return ArrayObject
*/
プライベート関数 formatUrlArr($arr) {
$newArr = 配列();
foreach ($arr as $key=>$value) {
if ($this->isExistsHttp($value)) {
$newArr[$key] = $value;
}
}
$newArr を返します。
}
/**
* QQ形式
* @param 文字列 $str
* @戻り文字列
*/
プライベート関数 formatQqMsn($str, $e='QQ') {
if (emptyempty($str)) は ''; を返します。
preg_match_all('/alt="'.$e.':(.+)"/Usi', $str, $arr);
if (count($arr[1])==1) $arr[1][0] を返します。
$newStr = null;
foreach ($arr[1] as $value) {
$newStr .= $value 。 ' ';
}
return rtrim($newStr, ' ');
}
/**
*去掉网址的A标签
* @param string $site
* @戻り文字列
*/
プライベート関数stripATags($site) {
$site = preg_replace('/
$site を返します。
}
/**
* URLにhttp
が含まれているかどうかを確認してください
* @param string $url
* @return bool
*/
プライベート関数 isExistsHttp($url) {
if (stristr($url, 'http://')) {
true を返します。
} その他 {
false を返します。
}
}
/**
* ページのコンテンツを取得します
* @param 番号 $page
* @戻り文字列
*/
プライベート関数 getContent($page=1) {
$re = file_get_contents($this->getUrl($this->key, $page));
$re を返します。
}
/**
* ページ番号を取得します
* @return 番号
*/
プライベート関数 getPageNum() {
$i = null;
$re = $this->getContent();
preg_match_all('/共(.+)页/Usi', $re, $arr);
$i = $arr[1][0];
$i を返します。
}
/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
*/
プライベート関数 getUrl($str, $page=1) {
return "http://www.ic.net.cn/partsearch/searchinstock.asp?newtype=1&area=&Page={$page}&partnumber={$str}&mfg=&DateCode=&QTY=&PRICE=&Exact=&orderby=inputdate&qty_filter= 50&usertype2=1&pack=;
}
/**
* ページのコンテンツを取得します
* @param string $url
* @戻り文字列
*/
プライベート関数 getUrlInfo($url) {
$re = file_get_contents($url);
$re を返します。
}
}
/*
手順実行思路:「IC取引ネット」のIC検索機能により、入力型番号を検索し、供給業者情報を取得します
データ库结构
テーブル「ic」を作成します (
`id` mediaint(8) unsigned NOT NULL auto_increment,
`会社` varchar(500) NOT NULL,
`address` varchar(500) デフォルト NULL,
`phone` varchar(500) デフォルト NULL,
`mobile` varchar(500) デフォルト NULL,
`fax` varchar(300) デフォルト NULL,
`zip` varchar(300) デフォルト NULL,
`person` varchar(500) デフォルト NULL,
`qq` varchar(300) デフォルト NULL,
`msn` varchar(300) デフォルト NULL,
`email` varchar(500) デフォルト NULL,
`website` varchar(300) デフォルト NULL,
`regDate` varchar(500) デフォルト NULL,
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/
$i = 新しい ic();
$arr = array_unique(array('MAX3232', 'AML8613', 'MT6225A', 'OM8373PS/N3/A', 'PT7313', 'MAX8212ESA', 'TL431', 'S3C2440', 'TMS320F2812PGFA', 'PCM1704' 、「AN6717」、「CA3162E」、「CA3161E」、「LM393N」、「DS18B20」、「SHT10」、「AML8613」、「AN6717」、「LM393N」、「CA3161E」、「CA3162E」、「PCM1704」、 STK392-040'、'K1667'、'MAX232'、'STM32F103'、'LM358'));
foreach ($arr as $v) {
$i->go($v);
}
?>
/**
*「ICトレーディングネットワーク」サプライヤーメインプログラムをキャプチャ
*著者リー
* 最終変更 $Date: 2012-2-6 10:44:32$
* 注: 「IC Trading Network」の Web サイトは GB2312 でエンコードされており、データベースは一貫している必要があるため、このプログラムは GB2312 エンコードに従って実行されます
*/
クラス ic {
プライベート$キー; // 型号
プライベート $pageNum; // 页幣
/**
*エントリープログラム
*/
パブリック関数 go($key) {
$this->key = $key;
$this->pageNum = $this->getPageNum();
$this->getInfo();
}
/**
* サプライヤーの URL リンク配列を取得します
* @return ArrayObject
*/
プライベート関数 getInfo() {
if ($this->pageNum==1) { # 处理只有一页的情况
$arr = $this->shopUrlMatchReArr($this->getContent());
$this->isAddSuccess($arr);
} elseif ($this->pageNum>1) { # 多页
for ($i=1; $i<=$this->pageNum; $i++) {
$arr = $this->shopUrlMatchReArr($this->getContent($i));
$this->isAddSuccess($arr);
}
}
}
/**
* 追加が成功したかどうかを出力します
* @param ArrayObject $arr
* @戻り文字列
*/
プライベート関数 isAddSuccess($arr) {
foreach ($arr as $k=>$v) {
if ($this->execAdd($this->getInfoByShopUrl($v))) {
echo '追加成功!!';
} その他 {
echo '追加に失敗しました!!';
}
}
}
/**
* データベースへの追加を実行
* @param ArrayObject $infoArr
* @return Number 影響を受ける行の数
*/
プライベート関数 execAdd($infoArr) {
$mysqli = $this->getDb();
if (!empty($infoArr['company'])) {
if (!$this->isExists($mysqli, $infoArr)) {
$num = $mysqli->query("INSERT INTO ic(company,address,phone,mobile,fax,zip,person,qq,msn,email,website,regDate,shopUrl) VALUES ('{$infoArr['company ']}'、'{$infoArr['アドレス']}'、'{$infoArr['電話']}'、'{$infoArr['モバイル']}'、'{$infoArr['ファックス'] }','{$infoArr['zip']}','{$infoArr['person']}','{$infoArr['qq']}','{$infoArr['msn']}' ,'{$infoArr['email']}','{$infoArr['website']}','{$infoArr['regDate']}','{$infoArr['shopUrl']}')" );
$num を返します;
} その他 {
false を返します。 #表示データすでに存在
}
} その他 {
false を返します;
}
}
/**
* データベースに接続します
*/
プライベート関数 getDb() {
$mysqli = new mysqli('localhost', 'root', '1715544', 'weiku');
$mysqli->query('SET NAMES GB2312');
$mysqli を返します;
}
/**
* 会社がすでに存在するかどうかを確認してください
* @param リソース $mysqli
* @param ArrayObject $infoArr
* @return bool
*/
プライベート関数 isExists($mysqli, $infoArr) {
$mysqli->query("SELECT company FROM ic WHERE company = '{$infoArr['company']}'");
if ($mysqli->affected_rows) {
true を返します;
} その他 {
false を返します;
}
}
/**
* フォーマット文字列
* @param 文字列 $str
* @戻り文字列
*/
プライベート関数 formatString($str) {
トリムを返す($str);
}
/**
*情報を入手
* @param $url
* @return ArrayObject
*/
プライベート関数 getInfoByShopUrl($url) {
$re = $this->getUrlInfo($url);
if (stristr($re, '')) $re = preg_replace('/.*/Usi', ' '、$re);
preg_match_all('/
preg_match_all('/地址:(.*)/Usi', $re, $addressArr);
preg_match_all('/電话:(.*)/Usi', $re, $phoneArr);
preg_match_all('/手机:(.*)/Usi', $re, $mobileArr);
preg_match_all('/传真:(.*)/Usi', $re, $faxArr);
preg_match_all('/邮编:(.*)/Usi', $re, $zipArr);
preg_match_all('/联系人:(.*)/Usi', $re, $personArr);
preg_match_all('/QQ:(.*)/Usi', $re, $qqArr);
preg_match_all('/MSN:(.*)/Usi', $re, $msnArr);
preg_match_all('/Email:(.*)/Usi', $re, $emailArr);
preg_match_all('/网址:(.*)/Usi', $re, $websiteArr);
preg_match_all('/注册日期:(.*)/Usi', $re, $regDateArr);
$infoArr = 配列(
'company'=>$this->formatString($companyArr[1][0]),
'address'=>$this->formatString($addressArr[1][0]),
'phone'=>$this->formatString($phoneArr[1][0]),
'mobile'=>$this->formatString($mobileArr[1][0]),
'fax'=>$this->formatString($faxArr[1][0]),
'zip'=>$this->formatString($zipArr[1][0]),
'person'=>$this->formatString($personArr[1][0]),
'qq'=>$this->formatString($qqArr[1][0]),
'msn'=>$this->formatString($msnArr[1][0]),
'email'=>$this->formatString($emailArr[1][0]),
'website'=>$this->stripATags($this->formatString($websiteArr[1][0])),
'regDate'=>$this->formatString($regDateArr[1][0]),
'shopUrl'=>$url
);
$infoArr;
を返します
}
/**
* ページに基づいてサプライヤー URL 配列を取得します
* @param string $re
* @return ArrayObject
*/
プライベート関数 shopUrlMatchReArr($re) {
preg_match_all('/.+/Usi', $re, $arr);
$arr = $this->formatUrlArr(array_unique($arr[1]));
$arr を返します;
}
/**
* 配列のフォーマット
* @param 配列 $arr
* @return ArrayObject
*/
プライベート関数 formatUrlArr($arr) {
$newArr = array();
foreach ($arr as $key=>$value) {
if ($this->isExistsHttp($value)) {
$newArr[$key] = $value;
}
}
$newArr;
を返します
}
/**
* QQ形式
* @param 文字列 $str
* @戻り文字列
*/
プライベート関数 formatQqMsn($str, $e='QQ') {
if (empty($str)) return '';
preg_match_all('/alt="'.$e.':(.+)"/Usi', $str, $arr);
if (count($arr[1])==1) return $arr[1][0];
$newStr = null;
foreach ($arr[1] を $value) {
$newStr .= $value 。 ' ';
}
return rtrim($newStr, ' ');
}
/**
※URLからAタグを削除してください
* @param string $site
* @戻り文字列
*/
プライベート関数stripATags($site) {
$site = preg_replace('/
$site を返します;
}
/**
* URLにhttp
が含まれているかどうかを確認してください
* @param string $url
* @return bool
*/
プライベート関数 isExistsHttp($url) {
if (stristr($url, 'http://')) {
true を返します;
} その他 {
false を返します;
}
}
/**
* ページのコンテンツを取得します
* @param 番号 $page
* @戻り文字列
*/
プライベート関数 getContent($page=1) {
$re = file_get_contents($this->getUrl($this->key, $page));
$re を返します;
}
/**
* ページ番号を取得します
* @return 番号
*/
プライベート関数 getPageNum() {
$i = null;
$re = $this->getContent();
preg_match_all('/共(.+)页/Usi', $re, $arr);
$i = $arr[1][0];
$i を返します;
}
/**
* URLリンクを取得します
* @param 文字列 $str
* @param int $page ページ番号
* @戻り文字列
*/
プライベート関数 getUrl($str, $page=1) {
return "http://www.ic.net.cn/partsearch/searchinstock.asp?newtype=1&area=&Page={$page}&partnumber={$str}&mfg=&DateCode=&QTY=&PRICE=&Exact=&orderby=inputdate&qty_filter= 50&usertype2=1&pack=;
}
/**
* ページのコンテンツを取得します
* @param string $url
* @戻り文字列
*/
プライベート関数 getUrlInfo($url) {
$re = file_get_contents($url);
$re を返します;
}
}
/*
手順実行思路:「IC取引ネット」のIC検索機能により、入力型番号を検索し、供給業者情報を取得します
データ据库结构
テーブル「ic」を作成します (
`id` mediaint(8) unsigned NOT NULL auto_increment,
`会社` varchar(500) NOT NULL,
`address` varchar(500) デフォルト NULL,
`phone` varchar(500) デフォルト NULL,
`mobile` varchar(500) デフォルト NULL,
`fax` varchar(300) デフォルト NULL,
`zip` varchar(300) デフォルト NULL,
`person` varchar(500) デフォルト NULL,
`qq` varchar(300) デフォルト NULL,
`msn` varchar(300) デフォルト NULL,
`email` varchar(500) デフォルト NULL,
`website` varchar(300) デフォルト NULL,
`regDate` varchar(500) デフォルト NULL,
主キー (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
*/
$i = 新しい ic();
$arr = array_unique(array('MAX3232', 'AML8613', 'MT6225A', 'OM8373PS/N3/A', 'PT7313', 'MAX8212ESA', 'TL431', 'S3C2440', 'TMS320F2812PGFA', 'PCM1704' 、「AN6717」、「CA3162E」、「CA3161E」、「LM393N」、「DS18B20」、「SHT10」、「AML8613」、「AN6717」、「LM393N」、「CA3161E」、「CA3162E」、「PCM1704」、 STK392-040'、'K1667'、'MAX232'、'STM32F103'、'LM358'));
foreach ($arr as $v) {
$i->go($v);
}
?>