2017-04-09 8 views
-1

私は、実行するたびにファイルのリストをファイルに保存するスクリプトを作成しています。PHP - 変数値がファイルに存在するかどうかをチェック

スクリプトが実行されるたびに、ファイルをチェックし、URLがファイルに含まれていない場合は、そのURLをFacebookに投稿する必要があります。 URLが既にファイルにある場合、それはFacebookに投稿すべきではありません。

今のところ、スクリプトが実行されるたびに、URLがすでにファイルに入っていても1つのURLがFacebookに投稿されています。私が間違っているのかわからない:すべての行

<?php 

define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__.'/src/Facebook/'); 
require_once(__DIR__.'/src/Facebook/autoload.php'); 

require('simple_html_dom.php'); 

$fb = new Facebook\Facebook([ 
'app_id' => 'xxxxxxxx', 
'app_secret' => 'xxxxxxxx', 
'default_graph_version' => 'v2.8', 
]); 



$html = file_get_html('https://www.trulia.com/for_sale/McKinney,TX/300000p_price/SINGLE-FAMILY_HOME_type/date;d_sort/'); 

$houses = []; 

$i = 1; 

foreach ($html->find('.cardContainer') as $house) { 
    if ($i > 2) { 
     break; 
    } 

    $houseLink = $house->find('a.tileLink', 0); 

    $houseUrl = 'https://trulia.com' . $houseLink->href; 

    file_put_contents("houses.txt", ($houseUrl . "\n"), FILE_APPEND); 

    $singleHouseHtml = file_get_html("{$houseUrl}"); 

    $singleHouseHtmlDesc = $singleHouseHtml->find('span#corepropertydescription', 0); 

    $singleHouseHtmlDescText = $singleHouseHtmlDesc->plaintext; 

    $houseFile = file_get_contents("houses.txt"); 

    if(strpos($houseFile, $houseUrl) == false) { 
     $linkData = [ 
      'link' => $houseUrl, 
      'message' => $singleHouseHtmlDescText 
     ]; 
     $pageAccessToken ='xxxxxxxxx'; 

     try { 
      $response = $fb->post('/me/feed', $linkData, $pageAccessToken); 
     } catch(Facebook\Exceptions\FacebookResponseException $e) { 
      echo 'Graph returned an error: '.$e->getMessage(); 
     exit; 
     } catch(Facebook\Exceptions\FacebookSDKException $e) { 
      echo 'Facebook SDK returned an error: '.$e->getMessage(); 
     exit; 
     } 
     $graphNode = $response->getGraphNode(); 
    } 


    $houses[] = [ 
     'url' => $houseUrl, 
     'desc' => $singleHouseHtmlDesc 
    ]; 

    $i++; 

} 


var_dump($houses); 
+0

これが正しい答えではないかもしれないが、これは私が追加するのではなく、何をするのかであります新しい行を使ってファイルに新しいURLを書き込む... csvを使うと、あなたが実行しているすべての.cardContainerについて、より簡単な仕事を読めるようになるでしょう。I/Oなぜかスクリプトの一番上にいれば、 csvを配列に変換してから、配列が存在するかどうかを確認して配列が存在しない場合はそれを配列に代入します。そうでない場合は配列の最後に新しい配列を追加しますcsvへの配列。 –

答えて

1

strpos機能カントチェックを(あなたは、\ nを使用して)。だから、(sフラグ付きで)するpreg_matchでそれを交換し、あなたが行われています。

if (!preg_match("~$houseUrl~s", $houseFile)) { 

あなたの最適化されたコード:

<?php 

define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/src/Facebook/'); 
require_once __DIR__ . '/src/Facebook/autoload.php'; 

require 'simple_html_dom.php'; 

$fb = new Facebook\Facebook([ 
    'app_id'    => 'xxxxxxxx', 
    'app_secret'   => 'xxxxxxxx', 
    'default_graph_version' => 'v2.8', 
]); 

$html = file_get_html('https://www.trulia.com/for_sale/McKinney,TX/300000p_price/SINGLE-FAMILY_HOME_type/date;d_sort/'); 

$houses = []; 

$house = $html->find('.cardContainer', 0); 

$houseLink = $house->find('a.tileLink', 0); 

$houseUrl = 'https://trulia.com' . $houseLink->href; 

file_put_contents("houses.txt", ($houseUrl . "\n"), FILE_APPEND); 

$singleHouseHtml = file_get_html($houseUrl); 

$singleHouseHtmlDesc = $singleHouseHtml->find('span#corepropertydescription', 0); 

$singleHouseHtmlDescText = $singleHouseHtmlDesc->plaintext; 

$houseFile = file_get_contents("houses.txt"); 

if (!preg_match("~$houseUrl~s", $houseFile)) { 
    $linkData = [ 
     'link' => $houseUrl, 
     'message' => $singleHouseHtmlDescText, 
    ]; 
    $pageAccessToken = 'xxxxxxxxx'; 

    try { 
     $response = $fb->post('/me/feed', $linkData, $pageAccessToken); 
    } catch (Facebook\Exceptions\FacebookResponseException $e) { 
     echo 'Graph returned an error: ' . $e->getMessage(); 
     exit; 
    } catch (Facebook\Exceptions\FacebookSDKException $e) { 
     echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
     exit; 
    } 
    $graphNode = $response->getGraphNode(); 
} 

$houses[] = [ 
    'url' => $houseUrl, 
    'desc' => $singleHouseHtmlDesc, 
]; 

var_dump($houses); 
+0

助けていただきありがとうございますが、実際にはうまくいきません。私がこのルートに行くと、URLは投稿されていません。 – user715564

+0

交換しましたか?条件コードまたはコード全体のみ? – MoeinPorkamel

+0

条件 – user715564

関連する問題