0

私が遭遇した問題には、単純な答えがあるようです。Web ページからテキストを取得するという単純なタスクを Web サイトに実行させたいと考えています。

私は基本的に自分のコードを次のようにしたい...

var str = TextFromWebPage;

「つかみたい」テキストがオンになっているhttp://dasd-sharepoint.dasd.org/Schools/STEMAcademy/Pages/default.aspx

このページを見ると (Control F を試して、現在の日付を検索してください。例: "May-9-2013:")、次の 5 つの日付のリストを探します。そのリストを取得して、Javascript の変数で使用したいと考えています。

だから私の好ましい最終結果は

var str = new Array("May-9-2013: “F” Day", "May-10-2013: “G” Day", "May-13-2013: “H” Day", "May-14-2013: “I” Day", "May-15-2013: “J” Day", "May-16-2013: “K” Day");

目的:基本的に学校はいつも時間をチェックしています。そのため、計算を行う代わりに、現在の時間と現在のクラスの終了時間を比較する簡単なプログラムを作成します。しかし、私の学校では「レターデイ」が異なります。つまり、クラスの長さは日によって異なります。文字の日は、12 日周期に基づいています。月曜日から金曜日までが AE になる可能性がありますが、これは次の週の月曜日が FJ になることを意味します。雪の日や休みの日は言うまでもありません。そのため、カレンダーを使用する代わりに、その地区の Web ページからこのデータを取得し、それをコードで使用して、その日の文字を自動的に確認する方法が必要であると考えました。

助けてくれてありがとう!

これが私がやっていることの私のコードです...

<!DOCTYPE html>
<html>
     <head>
        //<link rel="stylesheet" type="text/css" href="graphics.css">
        <script>
            //==========|  Data  |==========
            //These array lists contain the times the class periods start, end, and their title
            var Ptest = new Array("starts: 07:25 ends: 15:00 title: Testing", "starts: 07:25 ends: 30:00 title: Testing");
            var P14 = new Array("starts: 07:25 ends: 09:00 title: Pd: 1", "starts: 09:04 ends: 10:34 title: Pd: 2", "starts: 10:38 ends: 11:08 title: Lunch", "starts: 11:12 ends: 12:42 title: Pd: 3", "starts: 12:46 ends: 14:23 title: Pd: 4");
            var P17 = new Array("starts: 07:25 ends: 08:20 title: Pd: 1", "starts: 08:24 ends: 09:14 title: Pd: 2", "starts: 09:18 ends: 10:08 title: Pd: 3", "starts: 10:12 ends: 11:02 title: Pd: 4", "starts: 11:06 ends: 11:36 title: Lunch", "starts: 11:40 ends: 12:30 title: Pd: 5", "starts: 12:34 ends: 13:24 title: Pd: 6", "starts: 13:28 ends: 14:23 title: Pd: 7");
            var P57 = new Array("starts: 07:25 ends: 09:00 title: Pd: 5", "starts: 09:04 ends: 10:34 title: Pd: 6", "starts: 10:38 ends: 11:08 title: Lunch", "starts: 11:12 ends: 12:42 title: Pd: 7", "starts: 12:46 ends: 13:36 title: Advisory", "starts: 13:40 ends: 14:23 title: Seminar");
            //---------------------------------

            //==========|  Variables  |==========
            var input = P17; //What set of data to use
            var currentSlot = 0; //What the current Period is
            var over = false; //If the current school day if over
            //---------------------------------

            //==========|  Actions  |==========
            window.onload=function() {
                setInterval(function() {refresh();}, 1); //Loop
            }

            //---------------------------------


            //==========|  Core Functions  |==========
            function refresh() {
                display();
                updateClock();
            }

            function display() {
                var currentTime = getTime();
                var timeInSec = ((parseInt(currentTime.slice(0,2)))*3600)+((parseInt(currentTime.slice(3,5)))*60)+(parseInt(currentTime.slice(6,8)));

                if (currentSlot >= input.length) {over = true;}
                if (over == false) {
                    var data = input[currentSlot];
                    var nextSlot = input[currentSlot + 1];

                    var PdEndTime = ((parseInt(data.slice(20,23)))*3600)+((parseInt(data.slice(23,25)))*60);

                    var PdStart = data.slice(8,13);
                    var PdEnd = data.slice(20,25);
                    var PdTitle = data.slice(32,data.length);

                    if (nextSlot!==undefined) {
                        var NPdStart = nextSlot.slice(8,13);
                        var NPdEnd = nextSlot.slice(20,25);
                        var NPdTitle = nextSlot.slice(32,nextSlot.length);
                    }

                    var timeLeft = PdEndTime - timeInSec;
                    var hLeft = Math.floor(timeLeft / 3600);
                    var mLeft = Math.floor(timeLeft / 60);
                    var sLeft = Math.floor(timeLeft % 60);

                    if (hLeft > 0) {mLeft = mLeft - (hLeft*60);}

                    hLeft = add0(hLeft);
                    mLeft = add0(mLeft);
                    sLeft = add0(sLeft);

                    if (timeInSec > PdEndTime) {currentSlot++;}

                    document.getElementById("display").innerHTML = PdTitle+" ends at "+PdEnd+", in "+hLeft+":"+mLeft+":"+sLeft;
                }
                else {document.getElementById("display").innerHTML = "School is over!";}
            }

            //---------------------------------

            //==========|  Misc Functions  |==========


            function getTime() {
                var clock = new Date();
                var h = clock.getHours();
                var m = clock.getMinutes();
                var s = clock.getSeconds();

                h = add0(h);
                m = add0(m);
                s = add0(s);

                return h+":"+m+":"+s;
            }

            function updateClock() {
                document.getElementById("clock").innerHTML = getTime();
            }

            function add0(i) {
                if (i < 10) {
                    i  = "0"+i;
                }
                return i;
            }

            function changeInput(newInput) {
                input = newInput;
                currentSlot = 0;
            }
            //---------------------------------
        </script>
     </head>
    <body>
        <p id="clock" class="textCenter"></p>
        <p id="display" class="textCenter"></p>
        <p class="textCenter">
        <input type="button" onClick="changeInput(P14)" value="1-4 Block">
        <input type="button" onClick="changeInput(P17)" value="1-7 Normal">
        <input type="button" onClick="changeInput(P57)" value="5-7 Block">
        </p>
    </body>
</html>

ユーザーがボタンをクリックする必要がないように、今日が何日目かを自動的にチェックするだけにしたいのです。たとえば、A 日 = 1 ~ 7、B 日 = 1 ~ 4、C 日 = 1 ~ 7、D 日 = 5 ~ 7

4

2 に答える 2

1

必要な情報を取得するコードを次に示します (ページが変更されない場合)。Firefox で forcecors を使用 (およびアクティブ化) する必要があります。コンソールに記録された値の配列を表示するには、F12 を押します。

[更新] jQueryも使用する必要があることを忘れていました。jquery-1.9.0.js を html と同じディレクトリに配置します。

<!DOCTYPE html>
<html>
 <head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<title>Example</title>
<script type="text/javascript" src="jquery-1.9.0.js"></script>
<style type="text/css">
</style>
<script type="text/javascript">
$(document).ready(function(){
  var url="http://dasd-sharepoint.dasd.org/Schools/STEMAcademy/Pages/default.aspx";
  $.get(url,function(res){
    var p = new DOMParser();
    var doc = p.parseFromString(res, "text/html");
    var anchors=$(doc).find(".dfwp-column")[0].getElementsByTagName("a");
    var arr=[];
    for(var i=0;i<anchors.length;i++){
      arr.push(anchors[i].textContent);
    }
    console.log(arr);
  });

});
</script>
</head>
 <body>
<div class="bigDiv">Big</div>
<div class="smallerDiv">Small</div>
</html>
于 2013-05-09T15:51:14.103 に答える
1

別の Web サイトからこれを行っている場合、最善の策は、PHP や ASP、またはその他のサーバー側プログラミング言語を使用する Web サイトのセカンダリ ページを使用して、そのページを取得し、そのコンテンツを返すことです。そのサーバー側言語で強力な正規表現を使用して、必要なものの JSON オブジェクトを返します。ここでの本当の問題は、yoursite.comからdasd-sharepoint.dasd.org/Schools/STEMAcademy/Pages/default.aspxに移動できないことです。これは、従来の Java スクリプト環境ではまったく不可能です。

私の結論の理由は、XMLHttpRequest (XHR) を実行すると、ブラウザーは別の Web サイトにアクセスしないように設計されているためです。たとえそうであったとしても、技術的には Web サーバーが別のドメインからの XHR 経由のアクセスを拒否する必要があります。これはクロス ドメイン リクエストと呼ばれ、JavaScript 内ではネイティブに可能ではありません。

セカンダリ ページを使用してこのコンテンツをフェッチすると、はるかに効率的になり、この機能/Web サイトを使用するためのアドオンは必要ありません。これにより、機能を正確に制御し、ほとんどのホストに簡単に移植できます。また、どのクライアントもこのページにアクセスしてその機能を利用できるようになります。

アドオンを使用することは、何かを行うための適切な方法ではありません。より簡単な方法が常にあります。

別の Web サイトからこれを行うための HTML5 グッズについて説明します。

リモートホストから送信されたヘッダーに何らかの発言権がある場合は、「Access-Control-Allow-Credentials: true」ヘッダーを送信してもらうことができます。これにより、XMLHttpRequest2 別名 CORS 要求の処理が可能になります。この件に関する詳細情報を確認できます。次の URL: http://www.html5rocks.com/en/tutorials/cors/

残念ながら、私はCORSの経験がないので、役立つハウツーやその他のものはありません。典型的なajaxリクエストとかなり似ていますが、リモートパーティが許可する限り、クロスドメインをサポートするだけです(Control-Allow -Credentials: True) そしてシステムが適切にフォーマットされていることはもちろん、これで多くの助けが得られるわけではありませんが、適切なシステムを作成するための情報が得られることを願っています。

これを同じ Web サイト (つまり、同じ Web サイト/ドメイン dasd-sharepoint.dasd.orgの別のページ) で行っている場合、この情報を取得する簡単な方法があります。Web ページ上のすべての情報を解析することは、始めるときは難しいプロセスですが、それはひどいことではありません. 先に進まなければならないので、この件については後で詳しく書きます.

于 2013-05-09T17:20:35.557 に答える