0

所以我一直在我的网站上工作,我想在每次从 bash.org 加载页面时添加一个随机引用,我有点让它工作但我正在考虑使用“preg_replace”而不是“array_splice”摆脱页面的页眉和页脚。随着我当前使用的代码摆脱了页眉,我不知道如何摆脱页脚。请帮忙!

我目前拥有的代码

<html>
<head>
    <title>Chris's Website</title>
    <link href="lesson_3_css.css" type"text/css" rel="stylesheet"/>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css"> body, a, a:hover {cursor: url(http://q3ait.org/~bogauschc/WorkInProgress/test/proxy/cur116.cur), progress; scrollbar-3dlight-color:#FFFFFF; scrollbar-arrow-color:#FFFFFF; scrollbar-base-color:#FF9900; scrollbar-darkshadow-color:#333333; scrollbar-face-color:#FF9900; scrollbar-highlight-color:#FFFFFF; scrollbar-shadow-color:#000000;}
body {
    background-image: url(Speaker%20Fire.png);
}
.title div {
    color: #F00;
}
</style>

<script language="JavaScript">
function clock(){
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var ampm = " PM "
if (hour < 12){
ampm = " AM "
}
if (hour > 12){
hour -= 12
}
if (hour < 10){
hour = " " + hour
}
if (minute < 10){
min = "0" + minute
}
if (second < 10){
second = "0" + second
}
document.clockForm.clockBtn.value = hour + ":" + minute + ":" + second + ampm
setTimeout("clock()", 1000)
}
window.onload=clock;
</script>

</head>
<body>
    <div class="title">
      <div align="center">
        <p>&nbsp;</p>

            <td align="left"><form name="clockForm">
          <input type="button" name="clockBtn" value=" " />
        </form>
        <a><img src="http://www.reliablecounter.com/count.php?page=bogauschc.no-ip.org&digit=style/plain/4/&reloads=0" border="2"></a>
        </br>
      </div>
    </div>
<div class="nav">
  <p><a href="http://q3ait.org/~bogauschc/html">HTML files</a></p>
  <p><a href="http://turntable.fm/mayor_bees_room">My Turntable</a></p>
  <p><a href="http://q3ait.org">Q3AIT</a></p>
  <p><a href="http://www.chathamcentralschools.com/hs/">Chatham High</a></p>
  <p><a href="http://q3ait.org/~bogauschc/WorkInProgress">Work In Progress</a></p>
  <p><a href="games.html">Games</a></p>
  <p><a href="webcams.html">Webcams</a></p>

</div>
    <div class="main" align="center">
</br>
    <p>Im Chris and I Can Do Things!</p>
    <p>&nbsp;</p>
<?php
if(!$_GET['n']) {
$num = rand(1,400);
$open = fopen("http://bash.org/?".$num, "r");
$line = file("http://bash.org/?".$num);
array_splice($line, 0, 83);
array_splice($line, 89, 200);
foreach ($line as $line_num => $line) {
echo $line;
}
}
?>
<p>&nbsp;</p>
<iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fpages%2FChriss-Website%2F218161641601802&amp;width=292&amp;height=62&amp;colorscheme=light&amp;show_faces=false&amp;border_color&amp;stream=false&amp;header=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:292px; height:62px;allowTransparency="true"></iframe>
        <p>&nbsp;</p>
        <script language="JavaScript">
            VIH_BackColor = "palegreen";
            VIH_ForeColor = "navy";
            VIH_FontPix = "16";
            VIH_DisplayFormat = "You are visiting from:<br>IP Address: %%IP%%<br>Host: %%HOST%%";
            VIH_DisplayOnPage = "yes";
    </script>
<script language="JavaScript" src="http://www.hashemian.com/js/visitorIP.js.php"></script>

    <p><a href="IndexOf.html">Index Of Files For This Page</a></p>
</div>
</body>
</html>

这是一个 bash 引用示例http://bash.org/?47 我的网站是http://q3ait.org/~bogauschc/

这就是整个 index.php,如果您能帮助摆脱页眉和页脚,将不胜感激!

- 克里斯

4

2 回答 2

2

@ceejayoz 是对的,它会让你的页面运行速度变慢,像这样动态地抓取 bash.org。如果您真的想要引号,最好单独抓取他们的页面并缓存一堆结果。

为了解析页面,而不是依赖偏移量和行号,您最好使用PHP Simple HTML DOM Parser之类的工具从文件中提取适当的内容。这将使处理从页面中提取数据变得更加容易,并且如果他们更改了页面布局,也将使更新脚本变得更加容易。

于 2012-01-17T21:08:50.267 回答
2

首先要做的事情-这是一种不好的方法。正如ceejay 在评论中指出的那样,在飞行中非常糟糕。然而 -

$data = file_get_contents('http://whatever-bash-url-is.php');
preg_match_all ("/<p class=\"qt\">([^`]*?)<\/p>/", $data, $matches);
print_r($matches);

这应该会给你 qt 类中的内容,这似乎是你想要的。

这样做的正确方法——除了因为他们似乎不提供 API 或 rss 提要而要求他们允许使用他们的内容之外——将在后端运行它并将你获得的每一个独特的报价存储到你自己的数据库中并在页面加载而不是远程 URL 时提供服务。您可以在以合理间隔运行的 cron 上执行此操作,或者只需编写一个脚本并自己运行它。

再一次 - 坏主意,因为您不拥有内容。这本质上是盗窃。

** 这也是考虑到你说如果他们改变他们的 dom 你可以改变你的代码。解析器会更好**

preg_match_all() http://php.net/manual/en/function.preg-match-all.php 参数:模式、主题、匹配

pattern 是您打算用来交叉引用下一个 arg 的正则表达式:在这种情况下,subject 是从 file_get_contents 返回的内容。它也可以是任何字符串。匹配是您将结果分配给的变量。它可以是你想要的任何东西,所以

preg_match_all("\d+", 'long string containing 2 expected digits to match this 1 pattern', $results);

应该产生这样的数组:

$results = [
    [0] => 2,
    [1] => 1
];

因为字符串中的数字 2 和 1 是唯一与我提供的 \d+ (仅限数字)正则表达式模式匹配的东西。

正则表达式可能看起来很可怕,但不要气馁。基本的谷歌搜索通常可以帮助你找到你需要的模式。或者你可以在这里问。

顺便说一句,您也可以只使用preg_match()因为您只寻找一个结果。我只是不知道他们是否出现在一个有很多结果的页面上,所以我选择了 preg_match_all()。

为避免空结果,您可以在其中抛出一个条件:

foreach($matches AS $m)
{
    if($m)
    {
        //process only if there is something here
    }
}

请注意,上面的这个例子是针对 preg_match 的。我相信 Preg_match_all 将返回一个多维数组。用户基本的调试工具,如 print_r,可以根据您的需要进行调整。此外,我在假设您在不是由用户启动的后端脚本上运行此示例的情况下使用此示例。如果你想要一个 on the fly 选项,你应该考虑 ajaxing 这个请求,然后创建一个递归函数,如果没有结果,它将重新调用 bash 站点。

于 2012-01-17T21:09:46.133 回答