0

Facebook のいいねを取得するスクリプトを変更して、代わりに Facebook のインサイトを取得しています。このスクリプトは、都市ごとにユーザーの固有のページ インプレッションを取得し、それらをすべて 1 つのセルに表示します。

質問: 複数のセルに分割する方法はありますか? シートに行を追加しようとしましたが、権限がないと言われました

コード:

////
// Facebook Fans Counter
// Made by Martin Hassman, http://twitter.com/hassmanm
// Released as Public Domain
// Look at http://labs.met.cz/ for other tools
// Edit by Jared Beach
//

function FacebookListOf(aPageId,aToken,aParameter)
{
  if (aPageId === undefined || aPageId === null)
  {
    throw "No parameter specified. Write Facebook PageID as parameter."
  }
  if (aToken === undefined || aToken === null)
  {
    throw "No parameter specified. Write Facebook Access Token as parameter."
  }
  if (aParameter === undefined || aParameter === null)
  {
    throw "No parameter specified. Write Facebook Access Token as parameter."
  }

  var today = new Date();
  today.setDate(today.getDate()-6);
  var dd = today.getDate();
  var mm = today.getMonth()+1; //January is 0!

  var yyyy = today.getFullYear();
  if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = yyyy+'-'+mm+'-'+dd;

  if (typeof aPageId != "number")
    throw "Parameter must be number.";

  // See http://developers.facebook.com/docs/reference/fql/page/ for API documentation
  var url = "https://api.facebook.com/method/fql.query?query=SELECT%20metric,%20value%20FROM%20insights%20WHERE%20object_id=%22"+ encodeURIComponent(aPageId) + "%22%20AND%20metric=%27"+ encodeURIComponent(aParameter) + "%27%20AND%20end_time=end_time_date%28%27"+ encodeURIComponent(today) +"%27%29%20AND%20period=period%28%27day%27%29%20&%20access_token=" + encodeURIComponent(aToken);
  var response = UrlFetchApp.fetch(url);

  if (response.getResponseCode() != 200)
    throw "Unexpected response code from Facebook.";

  var responseText = response.getContentText();

  if (responseText == null || responseText == "")
    throw "Empty response from Facebook.";

  var value;

  try
  {
    var xml = Xml.parse(responseText, false);
    var page = xml.getElement().getElement();

    if (page == null)
      throw "Wrong PageID.";
    value = page.getElement("value").getElements("insMap");
    /*
    var format2 = value.toXmlString();
    return format2;
    */
    if (!value || value.length ==0) {
      throw "no match found";
    }
  }
  catch (e)
  {
    throw "Problem with response from Facebook: " + e;
  }

  var r ="";
  var listLength = value.length;

  for (var i = 0; i < listLength; i ++){
    r = r + value[i].getAttribute("key").getValue() +  " : " + value[i].getText() + "\n";
  }
  return r;

}

**結果のスクリーンショット:** 電流出力

4

2 に答える 2

3

スプレッドシートに列を書き込むには、次のような 2D 配列が必要な[[],[],[],[],[]] ので、おそらくスクリプトのループを次のように変更できます。

  ...
  var r =[];
  var listLength = value.length;

  for (var i = 0; i < listLength; i ++){
    r.push([value[i].getAttribute("key").getValue() +  " : " + value[i].getText()]);
  }
  return r;

そして、SSで「印刷」するには、次のsetValues()ように使用します(画面キャプチャのように行2、列6)

var sh = SpreadsheetApp.getActiveSheet();
sh.getRange(2,6,r.length,1).setValues(r);

編集:これをカスタム関数として使用している場所に気付かなかったので、この回答の最後の部分を忘れてください。そうは言っても、各関数呼び出しは複数の行を占有するため (結果で得られるアイテムの数に応じて)、関数の使用方法にいくつかの副作用があります。
連続する行で使用すると、データが重複します...、シートの設計でこれを考慮してください。

私はこのサンプルであなたの機能をテストしました:

function testMultiRow() {
  var r =new Array()
  var value=['row1','row2','row3','row4','row5','row6']
  var listLength = value.length;
  for (var i = 0; i < listLength; i ++){
    r.push([value[i]]);
  }
return r
}

ここに画像の説明を入力

于 2013-01-30T17:43:20.250 に答える
0

標準のスプレッドシート関数を使用して、次のようなスクリプトのカスタム関数を制御できます。

= TRANSPOSE(SPLIT(YOUR_CUSTOM_FUNCTION)、CHAR(10)&CHAR(13)))

于 2013-01-31T11:18:22.967 に答える