ホームページ  >  記事  >  バックエンド開発  >  PHP と AJAX_PHP を使用して RSS アグリゲーターを作成するコードのチュートリアル

PHP と AJAX_PHP を使用して RSS アグリゲーターを作成するコードのチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:56:46764ブラウズ

単純な HTML ファイルを使用してサーバー側スクリプトにリクエストを送信し、そのリクエストに基づいてカスタム XML ファイルを受信し、ブラウザを更新することなくそれをユーザーに表示できることを想像してみてください。この記事の著者は、通常の Web アプリケーションで PHP と AJAX テクノロジを組み合わせて、ブラウザを更新せずにリアルタイムのデータ送信を作成する方法を一緒に検討します。
この記事ではPHP言語を使用していますが、サーバーサイド言語であればどの言語でも問題なく動作することを覚えておいてください。この記事を理解するには、JavaScript と PHP、または同様のサーバーサイド言語についての基本的な理解があることを前提としています。
この例では、AJAX を使用して、RSS フィードからカスタム PHP オブジェクトにリクエストを送信します。この PHP オブジェクトは、ローカル サーバー上のフィードをコピーし、このパスを返します。リクエスト オブジェクトはこのパスを受け取り、解析し、データを HTML 形式でユーザーに表示します。これは多くのステップのように思えますが、実際には 4 つの小さなファイルだけで構成されています。 4 つの小さなファイルが使用される理由は、それぞれの固有の長所のバランスをとり、システム全体のプロセスを非常に効率化するためです。
元のフィードを単に解析するのではなく、なぜローカル サーバー上にフィードのコピーを作成するのか疑問に思う読者もいると思います。その理由は、これにより、XML HTTP 要求オブジェクトによって課せられるクロスドメイン制限をバイパスできるためです。このカスタム PHP オブジェクトの作成方法については後で説明しますが、まずフォームの作成から始めましょう。
リクエストを行うフォームを作成します

最初に行う必要があるのは、HTML の head タグの間に使用する JavaScript と CSS ファイルを含めることです。アグリゲーターの最終レイアウトを実装するためのスタイルシートを組み込み、JavaScript ファイルを使用してリクエストとフィード解析を行いました:

次に、選択した RSS フィードをリクエストするフォームを作成します。私が作成したフォームは、入力フィールドとリクエストを送信するボタンのみで構成されています。このリクエストのクエリは、フィードの入力値とサーバー側で検証されるパスワードで構成される文字列です。例として、次の形式を使用しました:
"password=mypassword
このコードは各ページに表示されます。リクエストは読み込み時に一度行われるため、ページが更新されると、ページの読み込み時に入力フィールドの既存のフィード文字列がリクエストされます。これは、フォーム データと、それが行われたことを示す div タグの例です。フィードの特定のノード:

コードをコピーします コードは次のとおりです:


フィードを入力してください:





< /div>




私が作成した 3 つの div タグは、logo、copy、details で、それぞれレイアウト スタイルシートでスタイルが関連付けられています。フィードを分析するときにこれらを使用しますが、最初に要求したフィードにアクセスできるようにする必要があります。これは、前に説明した PHP オブジェクトを使用して実行できます。
カスタム PHP オブジェクトの作成
後で作成する XML HTTP リクエスト オブジェクトからアクセスできるように、ローカル サーバー上にリクエスト フィードのコピーを作成する小さな RSS クラスを PHP で作成しました。通常、ドメインを越えてファイルをリクエストすることはできません。つまり、リクエストしているファイルはローカル サーバー上にある必要があります。このクラスは、ローカル サーバー上でリクエストされたフィードのコピーを作成し、フィードへのローカル パスを返し、その後 Request オブジェクトによってアクセスされるため、クロスオリジン問題の解決策となります。
このクラスの唯一のメソッドはリクエスト メソッドであり、リクエストされた RSS フィードの URL を指すパラメータが 1 つだけあります。次に、ローカル サーバー上にディレクトリがあるかどうかを RSS 名で確認します。存在しない場合は、作成してそのアクセス許可モードを 0666 に設定します。これは、ディレクトリが読み取りおよび書き込み可能であることを意味します。読み取り可能に設定すると、ディレクトリに後でアクセスできます。書き込み可能に設定すると、フィードのコピーをローカル サーバーのディレクトリに書き込むことができます:
コードをコピー コードは次のとおりです:

// ディレクトリが存在しない場合は、ディレクトリを作成します
$dir = "rss";
if(!is_dir($dir))
{
mkdir($dir, 0666)

Windows の場合PHP 4.2.0 以降ではモード設定は必要ありません。ただし、存在しても無視されるため、プロジェクトが UNIX または Linux サーバーに移動された場合に備えて保存しておきました。
フィードをこのサーバーにコピーする前に、一意のファイル名が必要です。すべてのフィード名が一意であることを保証するために、完全な URL で md5 暗号化を使用しています。この新しいファイル名を使用すると、ファイルを指すディレクトリを説明する文字列を連結できます。これは、フィードのコピーを作成するときに使用されます:


コードをコピーします コードは次のとおりです:
/ /Create unique 上記で定義したパスと、要求された元のフィード URL への参照を使用して、
$file=md5($rss_url);
$path="$dir/$file. これで、ファイルのコピーを作成できます。最後に、リクエストへの応答として新しいファイルへのパスを返します:


コードをコピーします

コードは次のとおりです:
//フィードをローカルサーバーにコピーします copy($rss_url, "$path" ) ; return $path;
以下は、小さいながらも強力な RSS クラス全体です:
class RSS
{
function get($rss_url)
{
if($rss_url != " ")
{
//ディレクトリが存在しない場合は作成する
$dir = "rss";
if(!is_dir($dir))
{
mkdir($dir, 0666)
}
// name
$file = md5($rss_url);
$path = "$dir/$file.xml"
//フィードをローカルサーバーにコピー
copy($rss_url, "$path"); return $ path;
}
}
}
?>

この PHP クラスのメソッドにアクセスするには、クラスへのインターフェイスとして機能するリクエスト ファイルが必要です。これはまさにリクエストしているファイルです。このファイルは、最初にリクエストからクエリされたパスワード変数を検証し、リクエスタが許可されたユーザーではないことを示すメッセージを返すか、RSS フィード (リクエスト メソッドによって処理された後にローカル サーバーにコピーされる) を指します。応答するためのパス。この RSS フィードに応答するには、この RSS オブジェクトをインクルードしてインスタンス化し、要求されたフィードの URL をパラメータとして使用してリクエスト メソッドをアクティブにする必要があります:



コードをコピー
コードは次のとおりです:

if($password == "mypassword")
{
require_once('classes/RSS.class.php');
$rss = new RSS(); $request);
}
else
{
echo "あなたは権限のないユーザーです"
?>


POST リクエストを作成するには、まずリクエストオブジェクト。リクエスト オブジェクトの作成経験がない場合は、私の記事「AJAX の使用方法」を読むか、この記事のサンプル ソース コードを勉強してください。リクエスト オブジェクトが作成されたら、sendFeed メソッドを呼び出し、フォームで作成した URL を渡すことができます:



コードをコピー
コードは次のとおりです: function sendFeed(url){
post.onreadystatechange = sendRequest;
post.open("POST", url, true);
post.send(url)
}
PHP オブジェクトからの応答が正しく読み込まれたら、それに対応するローカル ファイルに再度リクエストを送信します。応答。この場合、post.responseText は新しいファイルへのパスを提供します。
function sendRequest(){
if(checkReadyState(post)){
request = createRequestObject();
request.onreadystatechange = onResponse; "GET",post.responseText,true);
request.send(null);タイトルと説明ノードを含む画像が含まれるものもあれば、含まれないものもあります。したがって、フィードバックを分析するときは、フィードバックに画像が含まれているかどうかを解読するために少しのチェックを行う必要があります。画像が含まれている場合は、その画像をフィードのタイトルとリンクとともに画像 div タグに表示できます。



コードをコピーします。 コードは次のとおりです。


var _logo = ""
; var _title = response.getElementsByTagName('title')[0].firstChild.data;
var _link = response.getElementsByTagName('link')[0].firstChild.data;
_logo += "" + _title + "
";
if(checkForTag(response.getElementsByTagName('image')[0]))
{ var _url = response.getElementsByTagName('url')[0].firstChild.data; _logo += "
}
document.getElementById('logo').innerHTML = _logo;

各画像を表示するためにチェックするだけでなく、フィード内のすべてのアイテムを反復処理するときにもチェックする必要があります。画像が存在すると、タイトルおよびリンク ノードの他のすべてのインデックス作成が正しく機能しなくなるためです。したがって、画像タグが見つかった場合は、各トラバーサルでインデックス値 (+1) を増やして、タイトルとリンク ノードのインデックスを調整する必要があります:



コードをコピー

コードは次のとおりです:


if(checkForTag (response.getElementsByTagName('image')[0]) "" i>0){
var _title=response.getElementsByTagName('title')[i+1].firstChild.data; getElementsByTagName( 'link')[i+1].firstChild.data;
}
else{
var _title =response.getElementsByTagName('title')[i].firstChild.data;
var _link = response.getElementsByTagName(' link' )[i].firstChild.data; } 特定のタグが存在するかどうかを確認するには、checkForTag メソッドを使用できます。 false; } }

フィード分析を実行するには多くの可能性があります。たとえば、項目をカテゴリに割り当て、そのカテゴリを折りたたみ可能にして、ユーザーが見たいものを選択できるようにすることができます。例として、日付を使用してアイテムを分類します。これは、特定のアイテムの pubDate が前のアイテムの pubDate と異なるかどうかを解読し、それに応じて新しい日付を表示することで実現されます。
コードをコピー
コードは次のとおりです。 (IF (I & GT; 1) {
var Previouspubdate = Response.Getelements Bytagname ('PUBDATE') [I-1] .firstChild.data; spubdate || Previouspubdate == 未定義){
_copy += "< ;div id='detail'>" + pubDate + "

";
}
_copy += "" + _title + "

";
document.getElementById('copy') .innerHTML += _copy;


上記の最後の部分は、ユーザーがフィードから特定のアイテムを選択したときに詳細を表示するために使用される showDetails メソッドであることに注意してください。このメソッドには 1 つのパラメーター (項目インデックス値) があり、フィード内の詳細ノードのインデックスを検索するために使用されます:


コードをコピー
コードは次のとおりです: function showDetails(index){
document.getElementById ('details').innerHTML = response.getElementsByTagName('description')[index].firstChild.data;
}

結論
AJAX を使用してクエリ文字列をサーバー側スクリプトに送信し、カスタマイズされたその文字列に基づく応答は、Web 開発者であれば誰でも可能です。このようにして、次の Web アプリケーションは新しい可能性に満ちたものになります。

http://www.bkjia.com/PHPjc/318011.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/318011.html技術記事単純な HTML ファイルを使用してサーバー側スクリプトにリクエストを送信し、そのリクエストに基づいてカスタム XML ファイルを受信し、それをほとんどスワイプせずにユーザーに表示することを想像してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。