2012-05-10 3 views
1

Быстрый вопрос здесь, у меня есть процесс, который захватывает RSS-каналы и добавляет их в базу данных mySQL.Ожидание выполнения задачи в PHP до перехода к следующему элементу

Во время этого процесса я буду использовать API удобочитаемости, чтобы захватить содержимое URL-адреса, когда я иду.

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

Мне интересно, не получится ли закончить процесс и сразу же перейти к следующей записи в RSS.

Может ли кто-нибудь предложить способ дать ему закончить, прежде чем двигаться дальше? Код ниже:

$db_hostname="localhost"; 
$db_username="myusername"; 
$db_password="mypassword"; 

try 
{ 
/* query the database */ 

$db = mysql_connect($db_hostname,$db_username,$db_password); 
if (!$db) 
{ 
    die("Could not connect: " . mysql_error()); 
} 
mysql_select_db("MyDB", $db); 


// Get stories that don't have a the readability assigned 
$query="select item_id, item_url from tw_articles_parse where story_readability = '' LIMIT 0 , 1"; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 
// Close the DB connection 
mysql_close(); 


// Start the loop of source RSS feeds 
$i=0; 
while ($i < $num) { 

    $item_url=mysql_result($result,$i,"item_url"); 
    $item_id=mysql_result($result,$i,"item_id"); 

    // Parse the story URL into the Readability API 
     $url = "https://www.readability.com/api/content/v1/parser?url=$item_url&token=myapikey"; 
     // Get the contents of the JSON returned by the API 
     $json = file_get_contents($url); 
     // Decode the JSON 
     $out = json_decode($json, true); 
     // Set the content as a variable 
     $story = mysql_real_escape_string($out['content']); 

     // Insert into the DB - Adding 0 to story_club_id as default 
     $item_insert_sql = "UPDATE tw_articles_parse SET story_readability=$story WHERE item_id='" . $item_id . "'"; 
     $insert_item = mysql_query($item_insert_sql, $db); 



$i++; 
}// end the loop of feeds 


    } catch (Exception $e) 
{ 
echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
+0

Что все эти теги там делают? – PeeHaa

+1

Пожалуйста, прекратите писать новый код с помощью древних 'mysql_ *' функций. Они больше не поддерживаются, и сообщество начало процесс [устаревания] (http://news.php.net/php.internals/53799). Вместо этого вы должны узнать о подготовленных операторах и использовать либо [PDO] (http://php.net/pdo), либо [MySQLi] (http://php.net/mysqli). Если вы хотите узнать, [здесь довольно хороший учебник по PDO] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). –

+1

, если ваш SET не будет story_readability = '$ story' – gunnx

ответ

0

Наверное, ничего не вставлено, потому что вы используете UPDATE заявление и там просто нет таких записей с correspoding ITEM_ID обновить? Попробуйте изменить UPDATE запрос INSERT ... ON KEY UPDATE DUPLICATE

К сожалению, мы не знаем вашу схему базы данных, но что-то, как это должно работать:

$item_insert_sql = "INSERT INTO tw_articles_parse (story_readability, item_id) VALUES ('$story', $item_id) ON DUPLICATE KEY UPDATE story_readability='$story'"; 
0

Возможно, у вас заканчивается память или время? Включить предупреждения и сообщения об ошибках:

ini_set("display_errors", 1); 
error_reporting(E_ALL);