1

boxofficemojo.com で映画のリンクにアクセスし、特定の映画の総収益を抽出するスクリプトを作成しようとしています。スプレッドシートにプラグインしたいので、これらのスクリプトを Google Apps スクリプトとして記述しています。

私の最初の実装は、映画のページで非常に目立つようにリストされている国内の合計を探しているときにうまく機能しました。(http://boxofficemojo.com/movies/?id=clashofthetitans2.htm は、たとえば、「[日付] 時点の国内合計」のすぐ下にある「$80,882,168」を抽出します。このスクリプトを拡張して、総生涯グロスの下に記載されている全世界の総総グロスを取得するために、しかし、私はそうすることができず、理由がわかりません.

問題のコードは次のとおりです。

function gross(aUrl)
{
  var page = UrlFetchApp.fetch(aUrl).getContentText();
  var matched = page.match(/Worldwide:<\/b><\/td>.*(\$.*)<td width="25%">/m);
  var amt = "$0";
  if (matched == null)
  {
    matched = page.match(/<b>(\$.*)<\/b>.*Distributor:/m);
    if (matched != null)
    {
      amt = matched[1];
    }

  } else
  {
    amt = matched[1];
  }
  return amt;
}

function testGross()
{
  var result = gross("http://boxofficemojo.com/movies/?id=clashofthetitans2.htm");
  Logger.log(result);
}

2 番目の正規表現は問題なく機能しますが、最初の正規表現は機能しません。testGross() を実行すると、ログに次のデータが出力されます。

null
$80,882,168

映画のページにいるときにページのソースを表示するだけで得られるデータを使用して、www.rubular.com の正規表現をテストしました。page.match 行を、ページ変数の完全なコンテンツを含む電子メールを送信する行に置き換えると、ページのソースを表示することを選択した場合に得られるもの。

どんな助けでも大歓迎です。

4

1 に答える 1

0

使用した例のページソースを見ると、正規表現の「終了」の部分を忘れていることがわかります。関連する部分は次のとおりです。

<td width="40%">=&nbsp;<b>Worldwide:</b></td>
<td width="35%" align="right">&nbsp;<b>$289,732,168</b></td>
<td width="25%">&nbsp;</td>

あなたの正規表現では、その部分の後、スペース文字を(\$.*)考慮しません。</b></td>また、m修飾子が期待どおりに機能しません。実際、ここでは違いはありません。は改行.と一致しません。「固定」正規表現は次のとおりです。

/Worldwide:<\/b><\/td>[\s\S]*(\$.*)<\/b>[\s\S]*<td width="25%">/m

とにかく、これが私がそれを行う方法です:

/Worldwide:<\/b><\/td>[\s\S]*?<b>(\$.+)<\/b><\/td>/
于 2012-05-03T12:24:56.270 に答える