0

だから私は自分のウェブサイトで作業していて、ページがbash.orgから読み込まれるたびにランダムな引用符を追加したいのですが、ちょっと動作ましたが、「array_splice」の代わりに「preg_replace」を使用することを考えていましたページのヘッダーとフッターを削除します。現在使用しているコードでは、ヘッダーだけを削除し、フッターを削除する方法を理解できません。助けてください!

私が現在持っているコード

<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 SimpleHTMLDOMパーサーなどのツールを使用してファイルから適切なコンテンツを取得する方がよい場合があります。これにより、ページからのデータのプル処理がはるかに簡単になり、ページレイアウトが変更された場合にスクリプトを更新するのも非常に簡単になります。

于 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 args:パターン、件名、一致

patternは、次の引数を相互参照するために使用する正規表現です。この場合、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 +(数字のみ)の正規表現パターンに一致する唯一のものであるためです。

正規表現は恐ろしいように見えることがありますが、落胆しないでください。基本的なグーグル検索は通常、必要なパターンを見つけるのに役立ちます。または、ここで質問することもできます。

ちなみに、検索する結果は1つだけなので、 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のようなユーザーの基本的なデバッグツールを使用して、これを必要なものに絞り込みます。また、ユーザーによって開始されていないバックエンドスクリプトでこれを実行していることを前提として、この例を使用しています。オンザフライオプションが必要な場合は、このリクエストをajaxすることを検討し、結果がない場合にbashサイトを再度呼び出す再帰関数を作成する必要があります。

于 2012-01-17T21:09:46.133 に答える