最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - GiantBomb API Work - Stack Overflow

programmeradmin1浏览0评论

I have made an account and have my api key currently i just want a simple search box and button that when hit will list the game and the image of that game

Have linked the site info below

I want to run is and get the output using json and jquery any help wele

This is a working search now some what does not allow the user to enter in a new value and there is a problem bring up the image

two main problems wont load the image just says undefined and cant figure out how to make it a full search only when he user enters a new title

   <html>
      <head>
        <script src=".5.1/jquery.min.js"></script>

        <script>
    $(document).ready(function(){
            $.ajax({
              url: "/",
              type: "get",
              data: {api_key : "key here", query: "star trek", resources : "game", field_list : "name, resource_type, image", format : "jsonp", json_callback : "gamer" },
              dataType: "jsonp"
            });
    });

    function gamer(data) {
              var table = '<table>';
              $.each( data.results, function( key, value ) {
              table += '<tr><td>' + value.image + '</td><td>' + value.name + '</td><td>' + value.resource_type + '</td></tr>';
            });
                table += '</table>';
            $('#myelement').html(table);
    }

        </script>

      </head>
      <body>
      <h1>Game Search</h1>
      <input id="game" type="text" /><button id="search">Search</button>
      <div id="myelement"></div>
      </body>
    </html>

I have made an account and have my api key currently i just want a simple search box and button that when hit will list the game and the image of that game

Have linked the site info below

http://www.giantbomb./api/documentation

I want to run is and get the output using json and jquery any help wele

This is a working search now some what does not allow the user to enter in a new value and there is a problem bring up the image

two main problems wont load the image just says undefined and cant figure out how to make it a full search only when he user enters a new title

   <html>
      <head>
        <script src="https://ajax.googleapis./ajax/libs/jquery/1.5.1/jquery.min.js"></script>

        <script>
    $(document).ready(function(){
            $.ajax({
              url: "http://api.giantbomb./search/",
              type: "get",
              data: {api_key : "key here", query: "star trek", resources : "game", field_list : "name, resource_type, image", format : "jsonp", json_callback : "gamer" },
              dataType: "jsonp"
            });
    });

    function gamer(data) {
              var table = '<table>';
              $.each( data.results, function( key, value ) {
              table += '<tr><td>' + value.image + '</td><td>' + value.name + '</td><td>' + value.resource_type + '</td></tr>';
            });
                table += '</table>';
            $('#myelement').html(table);
    }

        </script>

      </head>
      <body>
      <h1>Game Search</h1>
      <input id="game" type="text" /><button id="search">Search</button>
      <div id="myelement"></div>
      </body>
    </html>
Share Improve this question edited Apr 8, 2014 at 0:45 Jamiex304 asked Apr 7, 2014 at 16:56 Jamiex304Jamiex304 2421 gold badge8 silver badges26 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 7

Your working code as per standard of the giantbomb docs:

var apikey = "My key";
var baseUrl = "http://www.giantbomb./api";

// construct the uri with our apikey
var GamesSearchUrl = baseUrl + '/search/?api_key=' + apikey + '&format=json';
var query = "Batman";

$(document).ready(function() {

  // send off the query
  $.ajax({
    url: GamesSearchUrl + '&query=' + encodeURI(query),
    dataType: "json",
    success: searchCallback
  });


    // callback for when we get back the results
    function searchCallback(data) {
        $('body').append('Found ' + data.total + ' results for ' + query);
        var games = data.game;
        $.each(games, function(index, game) {
            $('body').append('<h1>' + game.name + '</h1>');
            $('body').append('<p>' + game.description + '</p>');
            $('body').append('<img src="' + game.posters.thumbnail + '" />');
        });
    }
});

http://jsfiddle/LGqD3/

GiantBomb Api example/explanation

First get your api key

Key: http://www.giantbomb./api/
Documentation: http://www.giantbomb./api/documentation

Your base url:

http://www.giantbomb./api/

Your url structure:

/RESOURCE?api_key=[YOUR_API_KEY]&format=json/FILTERS/FIELDS

  • /RESOURCE/ID example: /game/3030-38206/
    The type of resource you which to return, in your case a search. Sometimes.. in case of a specific game you also want to pass in the ID under /ID (like in the example)

  • api_key
    Your api key
    You need this otherwise you cannot use the api :)

  • format
    The format you which to output, in this case json.

  • FILTERS example: /search?limit=100
    This manipulates the resourses output
    See under the resources in the documentation for a what you can do.

  • FIELDS example: /search?field_list=description,
    Which field to return, use this to "reduce the size of the response payload"

A game request for it's name & description would be:

http://www.giantbomb./api/game/3030-38206/?api_key=[YOUR-API-KEY]&format=json&field_list=name,description

A search request

Lets say we want to search for the game "Elder scroll online".
You would construct your url like this:
/search/?api_key=[YOUR-API-KEY]&format=json&query="elder scrolls online"&resources=game

To implement this in with $.ajax:

The ajax function

/*
 *  Send a get request to the Giant bomb api.
 *  @param string resource set the RESOURCE.
 *  @param object data specifiy any filters or fields.
 *  @param object callbacks specify any custom callbacks.
 */
function sendRequest(resource, data, callbacks) {
    var baseURL = 'http://giantbomb./api';
    var apiKey = '[YOUR-API-KEY]';
    var format = 'json';

    // make sure data is an empty object if its not defined.
    data = data || {};

    // Proccess the data, the ajax function escapes any characters like ,
    // So we need to send the data with the "url:"
    var str, tmpArray = [], filters;
    $.each(data, function(key, value) {
        str = key + '=' + value;
        tmpArray.push(str);
    });

    // Create the filters if there were any, else it's an empty string.
    filters =  (tmpArray.length > 0) ? '&' + tmpArray.join('&') : '';

    // Create the request url.
    var requestURL = baseURL + resource + "?api_key=" + apiKey + "&format=" + format + filters;

    // Set custom callbacks if there are any, otherwise use the default onces.
    // Explanation: if callbacks.beforesend is passend in the argument callbacks, then use it. 
    // If not "||"" set an default function.
    var callbacks = callbacks || {};
    callbacks.beforeSend = callbacks.beforeSend || function(response) {};
    callbacks.success = callbacks.success || function(response) {};
    callbacks.error = callbacks.error || function(response) {};
    callbacks.plete = callbacks.plete || function(response) {};

    // the actual ajax request
    $.ajax({
        url: requestURL,
        method: 'GET',
        dataType: 'json',

        // Callback methods,
        beforeSend: function() {
            callbacks.beforeSend()
        },
        success: function(response) {
            callbacks.success(response);
        },
        error: function(response) {
            callbacks.error(response);
        },
        plete: function() {
            callbacks.plete();
        }
    });
}

search function

function search() {
    // Get your text box input, something like: 
    // You might want to put a validate and sanitation function before sending this to the ajax function.
    var searchString = $('.textox').val();

    // Set the fields or filters 
    var data = {
        query: searchString,
        resources: 'game'
    };

    // Send the ajax request with to '/search' resource and with custom callbacks
    sendRequest('/search', data, { 
        // Custom callbacks, define here what you want the search callbacks to do when fired.
        beforeSend: function(data) {},
        success: function(data) {},
        error: function(data) {},
        plete: function(data) {},
    });
}

Example of a get game function

function getGame() {
    // get game id from somewhere like a link.
    var gameID = '3030-38206';
    var resource = '/game/' + gameID;

    // Set the fields or filters 
    var data = {
        field_list: 'name,description'
    };

    // No custom callbacks defined here, just use the default onces.
    sendRequest(resource, data);
}

EDIT: you could also make a mini api wrapper out of this, something like:

var apiWrapper = {};

apiWrapper.request = function(resource, data, callbacks) {
    // The get function;
};

apiWrapper.search = function(data) {
    // The search function
};

apiWrapper.getGame = function(id, data) {
    // The game function
}

apiWrapper.init = function(config) {
    var config = config || {};
    this.apiKey = config.apiKey || false;
    this.baseURL = config.baseURL || 'http://api.giantbomb.';
}

apiWrapper.init({
    apiKey: '[API-KEY]'
});

Have not tested the code, so there might be a bug in it, will clean it up tommorow :)
Edit: fixed a bug in $.ajax

发布评论

评论列表(0)

  1. 暂无评论