API веб-данных Facebook и D3.JS

Я пытаюсь создать простую панель инструментов с одной гистограммой, показывающей пост страницы, которой я владею, ранжированной по количеству акций. Я хотел бы построить это только с помощью Javascript и D3.JS. Я хочу использовать этот кусок кода:

FB.api(
  '/me',
  'GET',
  {"fields":"id,name,posts{name,shares}"},
  function(response) {
      // Insert your code here
  }
);

Оттуда я хочу быть в состоянии передать данные в мой код D3.js. Как я могу это сделать? Нужно ли использовать node.js или что-то подобное? Я могу получить данные, но знаю только, что я могу распечатать их в консоли javascript.

Я не хочу, чтобы кто-нибудь дал мне весь код, но намек на то, что мне следует сделать, был бы великолепен.

Спасибо,

Саймон.

1 ответ

Решение

Надеюсь, это поможет вам.

    <fb:login-button autologoutlink="true">
    </fb:login-button>
    <div>
      <div id="canvas-svg"></div>
    </div>

    var simplebarchart = function (options) {

    var __ = options || {};
    __.CHART_NAME = __.CHART_NAME || 'areachart';
    __.CONTAINER = __.CONTAINER || 'canvas-svg';
    __.WIDTH = __.WIDTH || 800;
    __.HEIGHT = __.HEIGHT || 800;
    __.MERGIN = __.MERGIN || {top: 20, right: 20, bottom: 30, left: 50}

    __.Y_AXIS_LABEL = __.Y_AXIS_LABEL || "Count";
    __.X_DATA_PARSE = __.X_DATA_PARSE || function (d) {
      return d;
    };
    __.Y_DATA_PARSE = __.Y_DATA_PARSE || parseInt;
    __.Y_DATA_FORMAT = __.Y_DATA_FORMAT || function (i) {
      return i;
    };
    __.X_AXIS_COLUMN = __.X_AXIS_COLUMN || "name";
    __.Y_AXIS_COLUMN = __.Y_AXIS_COLUMN || "talking_about_count";


    var margin = __.MERGIN,
        width = __.WIDTH - margin.left - margin.right,
        height = __.HEIGHT - margin.top - margin.bottom;

    var x = d3.scale.ordinal()
        .rangeRoundBands([0, width], 0.1);

    var y = d3.scale.linear()
        .range([height, 0]);

    var xAxis = d3.svg.axis()
        .scale(x)
        .orient("bottom");

    var yAxis = d3.svg.axis()
        .scale(y)
        .orient("left")
        .tickFormat(__.Y_DATA_FORMAT);


    var svg = d3.select('#' + __.CONTAINER).append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
        .attr('class', __.CHART_NAME)
        .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");


    this.render = function (data) {
      x.domain(data.map(function (d) {
        return __.X_DATA_PARSE(d[__.X_AXIS_COLUMN]);
      }));
      y.domain([0, d3.max(data, function (d) {
        return __.Y_DATA_PARSE(d[__.Y_AXIS_COLUMN]);
      })]);

      svg.append("g")
          .attr("class", "x axis")
          .attr("transform", "translate(0," + height + ")")
          .call(xAxis);

      svg.append("g")
          .attr("class", "y axis")
          .call(yAxis)
          .append("text")
          .attr("transform", "rotate(-90)")
          .attr("y", 6)
          .attr("dy", ".71em")
          .style("text-anchor", "end")
          .text(__.Y_AXIS_LABEL);

      svg.selectAll(".bar")
          .data(data)
          .enter().append("rect")
          .attr("class", "bar")
          .attr("x", function (d) {
            return x(d[__.X_AXIS_COLUMN]);
          })
          .attr("width", x.rangeBand())
          .attr("y", function (d) {
            return y(d[__.Y_AXIS_COLUMN]);
          })
          .attr("height", function (d) {
            return height - y(d[__.Y_AXIS_COLUMN]);
          });

      function type(d) {
        d[__.Y_AXIS_COLUMN] = +d[__.Y_AXIS_COLUMN];
        return d;
      }
    };
   };

  //  initialize fb API    
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '208005292601743',
      xfbml      : true,
      version    : 'v2.9'
    });
    FB.Event.subscribe('auth.login', function() {
      window.location.reload();
    });

    FB.getLoginStatus(function (response) {
      if (response.status === 'connected') {

        var accessToken = response.authResponse.accessToken;
        var user_id = response.authResponse.userID;
        // init bar chart
        var chart = new simplebarchart({});
        FB.api(
            '/me',
            'GET',
            {"fields":"likes.limit(10){created_time,name,talking_about_count}"},
            function(response) {
              var data = [].slice.call(response.likes.data);
              //render bar chart
              chart.render(data);
            }
        );

      }
    });
  };
Другие вопросы по тегам