Bash.org Цитата дня - PullRequest
       11

Bash.org Цитата дня

0 голосов
/ 18 января 2012

Итак, я работал над своим сайтом, на котором я хотел бы добавлять случайную цитату каждый раз, когда страница загружается с 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, если вы можете помочь избавиться от верхнего и нижнего колонтитула, это будет высоко ценится!

- Chris

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Перво-наперво - это плохой способ сделать это. На лету исключительно плохо, как отметил Сиджей в своем комментарии. Однако -

$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, который запускается с разумным интервалом, или просто написать скрипт и запустить его самостоятельно.

Еще раз - плохая идея, поскольку вы не являетесь владельцем контента. Это по сути кража.

** это также учитывая, что вы сказали, что можете изменить свой код, если они меняют свой дом. парсер будет лучше **

preg_match_all () http://php.net/manual/en/function.preg-match-all.php args: образец, предмет, совпадения

pattern - это регулярное выражение, которое вы намереваетесь использовать для перекрестной ссылки на следующий аргумент: предметом является содержимое, возвращаемое из file_get_contents в этом случае. Это также может быть любая строка. match - это переменная, которой вы назначаете результаты. Это может быть все, что вы хотите, так что

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

должен привести к массиву, подобному этому:

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

, так как числа 2 и 1 в строке - единственное, что соответствует шаблону регулярных выражений \ d + (только цифры), который я предоставил.

Regex может показаться ужасающим, но не падайте духом. Обычные поиски в Google обычно помогают найти нужный вам шаблон. Или вы можете спросить здесь.

Кстати, вы также можете просто использовать 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, помогут вам справиться с этой задачей. Кроме того, я использую этот пример в предположении, что вы запускаете его на серверном скрипте, не инициированном пользователем. Если вам нужна опция «на лету», вы должны изучить этот запрос, а затем создать рекурсивную функцию, которая бы повторно вызывала сайт bash, если результатов не было.

2 голосов
/ 18 января 2012

@ ceejayoz прав, из-за этого ваша страница будет работать медленнее, так что вы можете наскрести bash.org на лету.Если вы действительно хотите получить кавычки, вам лучше очистить их страницу отдельно и кэшировать кучу результатов.

Для анализа страницы, вместо того, чтобы полагаться на смещения и номера строк, вам может быть лучше использовать такой инструмент, как PHP Simple HTML DOM Parser , чтобы извлечь соответствующее содержимое из файла.Это облегчит обработку данных на страницах, а также значительно облегчит обновление вашего скрипта, если они когда-либо изменят свой макет страницы.

...