php抓取开奖网页内容(懒惰匹配,也就是能匹配得越少喔(组图))

优采云 发布时间: 2021-10-04 11:09

  php抓取开奖网页内容(懒惰匹配,也就是能匹配得越少喔(组图))

  //这里用正则表达式取出来,不要忘记在后端加一个斜杠。

  //.*? 是懒匹配,也就是你能匹配的越少,能匹配的内容就越少,这样你就不会赶超了。

  $host = $host[1];

  

  2. 构建图片存储文件夹:

  > 小谢这里用is_dir来判断文件夹是否存在。如果存在,则无需第二次创建。

  > 哈哈,对了,is_file函数可以判断这个文件是正常文件还是存在。

  > 但是file_exists() 好一点,因为我看到上面有人讨论过。

  if (!is_dir('img')) {mkdir('img');}

  > 3. 使用正则表达式提取图片的相对地址:

  $regex ='/url('{0,1}"{0,1}(.*?)'{0,1}"{0,1})/';

  //这里我们使用正则表达式来匹配图片地址,需要考虑三种情况,分别是url(1.gif) url('1.gif') url("1. gif”)。

  //这三种写法都可以,所以我们用上面的正则把里面的1.gif取出来。

  //'{0,1} 表示单引号可能出现 1 次或 0 次,“表示双引号可能出现 1 次或 0 次。

  //中间一定要用懒匹配,否则会1.gif"而不是1.gif鸟,O(∩_∩)P。

  preg_match_all($regex,$data,$result);

  > 4. 处理这些图片:

  > 首先使用循环处理正则规则提取的第一个分支的内容数组。

  > 呃,这里的第一个分支是指正则表达式中的第一个括号,呵呵,以此类推。

  foreach ($result[1] as $val) {}

  > 然后我们用正则表达式来判断,因为我们还需要考虑/upload/201109/203807.gif。

  > 这使用完整路径而不是像其他人一样的 /img/1.gif 或 img/1.gif。

  > 所以分开判断,再判断这两个,看是/img/1.gif还是img/1.gif。

  复制代码代码如下:

  if (preg_match('/^http.*/',$val)) {$target = $val;}

  else if (preg_match('/^/.*/',$val)) {$target=$host.$val;}

  否则 {$target=$url.$val;}

  回声$目标。”

  rn";

  > 最后取出文件名,即/img/1.gif中的1.gif,保存文件。

  复制代码代码如下:

  preg_match('/.*/(.*.D+)$/',$val,$name);

  > 然后我们就可以开始下载了,这里是一个强大的复制功能用法。

  复制代码代码如下:

  if (!is_file('./img/'.$name[1])) {

  $imgc = file_get_contents($target);

  $handle = fopen('./img/'.$name[1],'w+');

  fwrite($handle,$imgc);

  fclose($handle);

  }

  > 上面一个是我们的老方法,嘎嘎,很麻烦。有一次,小邪突然发现了复制的力量。

  > 复制也可以下载,这样就可以方便的用下面的代码来处理了,上面的就可以退鸟了。

  复制代码代码如下:

  if (!is_file('./img/'.$name[1])) {

  copy($target,'./img/'.$name[1]);

  }

  > 5. 完整源码:

  > 使用时只需填写$url,然后将所有CSS内容保存在abc.css中。

  复制代码代码如下:

  现在玩微博的人越来越多,微博上的第三方应用开​​发也越来越多。偶然接触到新浪微博API开发。新浪微博API开发资源比较大。新浪微博为开发者提供了一个平台。网站为: 收录新浪微博开发的综合信息,包括开发者的使用和介绍、各种语言的API功能介绍文档、SDK等资料。.

  在开发和学习的过程中,感觉虽然不是太难,但还是有一些问题需要大家注意。今天在开发学习的过程中,简单的用PHP开发了新浪微博API。内容组织和解释,

  新浪微博API开发前的准备

  首先到新浪微博开放平台下载基于PHP的SDK开发包。下载地址为:

  下载完成后放到自己的开发环境中解压。演示程序也包括在内。我们可以参考它的示例程序进行编写。

  新浪微博API开发最重要的用户授权流程

  事实上,开发过程中的很多问题都集中在用户授权阶段。我开发的第三方应用使用的是OAuth授权。OAuth授权流程在新浪微博开放平台上有非常清晰完整的介绍。我们你可以看看。这里我将从示例开发的角度进行介绍和说明。

  1.首先获取未授权的Request Token

  复制代码代码如下:

  $o = new WeiboOAuth( WB_AKEY, WB_SKEY );

  $keys = $o->getRequestToken();

  //echo($keys['oauth_token'].':'.$keys['oauth_token_secret']);

  我们需要在新浪微博开放平台注册一个账号,或者直接用我们的新浪微博账号登录,进入我的应用,然后按照提示创建我们自己的第三方应用。创建完成后,我们可以得到两个授权App Key和App Secret值,这两个值是我们应用开发的关键。

  获取到授权值后,我们可以通过上面的代码来获取未授权的Request Token值,该值会保存在$key数组变量中。

  2. 然后请求用户授权token

  复制代码代码如下:

  $_SESSION['keys'] = $keys;

  aurl = $o->getAuthorizeURL( $keys['oauth_token'] ,false,'');

  获取到未授权Request Token值后,我们就可以使用上面的代码准备去新浪微博授权页面进行授权了。$aurl 是授权链接页面。得到$aurl后,我们可以使用header()直接跳转到它。授权页面,然后用户输入新浪微博账号和密码进行授权。授权完成后会自动跳转回你最后一个参数设置的回调页面:这个链接可以设置为上一个页面,这样授权完成后会显示 再次自动跳转回来。

  需要说明的是,需要设置session key的值,下面获取的授权Access Token中需要该值。很多朋友可能会参考开放平台上的说明进行授权,但是发现总是报错。这通常是问题所在。您尚未设置会话的键值。当然,下面的Access Token的值是无法获取的。必须记住这一点。

  3.最后是用户授权的Access Token

  复制代码代码如下:

  $o = new WeiboOAuth( WB_AKEY,

  WB_SKEY,

  $_SESSION['keys']['oauth_token'],

  $_SESSION['keys']['oauth_token_secret'] );

  $last_key = $o->getAccessToken( $_REQUEST['oauth_verifier']);

  回声($last_key['oauth_token']);

  以上代码最终获得了用户授权的Access Token。有两个值,它们存储在 $last_key 数组变量中。我们也可以看到最后两个参数是我们之前设置的session值。至此,基本完成。这是一个完整的新浪微博用户授权流程。

  授权完成后工作

  授权完成后,我们就可以开始调用新浪微博提供的各种API函数接口进行实际应用开发了。这里我简单介绍一下获取最新微博记录的界面。其他类似。

  获取新浪微博最新信息的API接口函数为:public_timeline(),示例代码如下:

  复制代码代码如下:

  //获取前20条最新更新的公众微博新闻

  $c = 新微博客户端( WB_AKEY,

  WB_SKEY,

  $oauth_token,

  $oauth_token_secret );

  $msg = $c->public_timeline();

  if ($msg === false || $msg === null){

  echo "发生错误";

  返回假;

  }

  if (isset($msg['error_code']) && isset($msg['error'])){

  echo ('Error_code:'.$msg['error_code'].'; Error:'.$msg['error'] );

  返回假;

  }

  打印_r($msg);

  通常我们拿到用户授权的访问令牌值后,我们将它们保存在我们的用户表中,并与我们应用程序中的帐户相对应。之后我们就不用每次调用新浪微博的API接口都去。认证。

  上面的代码很简单,实例化WeiboClient对象,然后直接调用接口函数public_timeline获取返回的信息,如果没有报错。通常新浪微博api接口返回的数据格式一般是Json格式或者xml格式,而我们这里是用php开发的,使用Json格式的数据有先天优势,如果返回Json格式的数据,使用php 函数 json_decode() 可以直接转换成 PHP 常用的数组格式。

  我们要使用的函数是Scandir,用于列出指定路径下的文件和目录,就像Dir一样。

  

  > 有了更强大的Glob()函数,功能就是以数组的形式返回匹配指定模式的文件名或目录。

  > 友情提示,不要像小邪一样在电脑前呆太久,否则你会像小邪一样血糖升高。

  一. 遍历单级文件夹:

  > 扫描单级文件夹的问题是,虽然两个函数的结果不同,但性能差别不大。

  > Scandir 函数将提供两行额外的行,它们是“.”。和“..”,但 Glob 没有。

  复制代码代码如下:

  函数 get_dir_scandir(){

  $tree = 数组();

  foreach(scandir('./') as $single){

  回声 $single。”

  rn";

  }

  }

  get_dir_scandir();

  函数 get_dir_glob(){

  $tree = 数组();

  foreach(glob('./*') 作为 $single){

  回声 $single。”

  rn";

  }

  }

  get_dir_glob();

  二. 递归遍历文件树:

  > 在递归扫描文件夹树的问题上,Glob函数还是表现得比较好,非常准确。

  > Scandir 功能会莫名其妙地扫描../ 处的文件两次,也就是说,如果小谢有两个文件。

  > ../b.php 和../a.php,结果会在扫描报告上出现两次,很奇怪。

  复制代码代码如下:

  //更新于2010.07.25-以下代码无效

  $path ='..';

  函数 get_filetree_scandir($path){

  $tree = 数组();

  foreach(scandir($path) 作为 $single){

  if(is_dir('../'.$single)){

  $tree = array_merge($tree,get_filetree($single));

  }

  别的{

  $tree[] ='../'.$single;

  }

  }

  返回 $tree;

  }

  print_r(get_filetree_scandir($path));

  //更新在2010.07.25-以下是新代码

  $path ='./';

  函数 get_filetree_scandir($path){

  $result = array();

  $temp = 数组();

  if (!is_dir($path)||!is_readable($path)) 返回空值;//检查目录的有效性

  $allfiles = scandir($path); //获取目录下的所有文件和文件夹

  foreach ($allfiles as $filename) {//遍历目录下的文件和文件夹

  if (in_array($filename,array('.','..'))) 继续;//忽略。和..

  $fullname = $path.'/'.$filename; //获取完整文件路径

  if (is_dir($fullname)) {//如果是目录,继续递归

  $result[$filename] = get_filetree_scandir($fullname); //递归开始

  }

  别的 {

  $temp[] = $文件名;//如果是文件,则存入数组

  }

  }

  foreach ($temp as $tmp) {//将临时数组的内容存入保存结果的数组

  $result[] = $tmp; //这允许文件夹在前面,文件在后面

  }

  返回 $result;

  }

  print_r(get_filetree_scandir($path));

  > Glob 函数扫描非常准确,会自动按照字母顺序排列,这似乎是最好的解决方案。

  复制代码代码如下:

  $path ='..';

  函数 get_filetree($path){

  $tree = 数组();

  foreach(glob($path.'/*') as $single){

  if(is_dir($single)){

  $tree = array_merge($tree,get_filetree($single));

  }

  别的{

  $tree[] = $single;

  }

  }

  返回 $tree;

  }

  print_r(get_filetree($path));

  【PHP遍历文件夹和子目录的函数代码】相关文章:

  ★ 使用 PHP 4.2 编写安全脚本

  ★ PHP 中如何获取文件行数

  ★ 完整版多文件上传系统

  ★ php中使用curl打开https网站

  ★ PHP中使用的JS打印功能

  ★ 用PHP创建PDF中文文档

  ★ 使用PHP调用数据库的存储过程

  ★ 使用PHP上传文件

  ★ 一段PHP加解密代码

  ★ 多文件上传示例

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线