【问题标题】:Searching for all events in a geographic area using bandsintown API使用 bandintown API 搜索地理区域中的所有事件
【发布时间】:2018-12-30 18:29:31
【问题描述】:

所以,我正在尝试使用 bandintown API 提取特定区域的所有事件。例如,我有兴趣为加利福尼亚州旧金山举办所有即将举行的音乐会。这里的关键是我想要所有事件,而不是特定的艺术家。

使用我在 stackoverflow 上找到的一些代码,我对其进行了一些调整,以便仅从 CA 中提取数据。代码如下:

// HTTP GET call to BandsInTown API
function httpGetAsync(theUrl, callback) { //theURL or a path to file
var httpRequest = new XMLHttpRequest();
httpRequest.onreadystatechange = function() {
    if (httpRequest.readyState == 4 && httpRequest.status == 200) {
        var data = JSON.parse(httpRequest.responseText);
        if (callback) {
            callback(data);
        }                   
    }
    else {
        //alert("error loading JSON doc");
    }
};

httpRequest.open('GET', theUrl, true); 
httpRequest.send(null);
}

//extracts data from api for each artist
function parseEvent(artist) {
var url = "https://rest.bandsintown.com/artists/" + artist + "/events?app_id=9c42d4dc9c1397201a4e3dc4d0bb840c&venue.region=" + region;

httpGetAsync(url, function(data) {
    var numEvents = Object.keys(data).length;
    console.log(numEvents)
    //var events = [];
    for (var j = 0; j < numEvents; j++) {
      if (data[j].venue.region == 'CA'){
        document.write(data[j].venue.name + "-> ");
        document.write("LAT:" + data[j].venue.latitude + " " + "LNG:" + data[j].venue.longitude);
        document.write("ARTIST: " + data[j].artists[3].name);
        document.write("DATE: " + data[j].datetime);
        document.write("Region:" + data[j].venue.region);
        document.write(" " + j + " "); 
        }
    }
}); 
}

var artists = ["Twenty One Pilots", "Atmosphere", "Vince Staples", "STRFKR", "Rainbow Kitten Surprise", "Mac Demarco", "Hippo Campus", "Drake", "John Legend", "Rihanna", "Flying Lotus", "MGMT", "Jason Derulo", "M83", "Bon Iver", "Childish Gambino","The Del McCoury Band","Dawes"];
var region = "CA";

for (var i = 0; i < artists.length; i++) {
parseEvent(artists[i]);
document.write(" ---NEXT ARTIST--- ");
}

所以,我放入“艺术家”数组只是为了让它工作,看看我是否可以成功连接到 API - 但最终,我想调整它以拉动所有事件,而不仅仅是特定的艺术家。我还没有找到这方面的任何例子,而且 bandintown 文档很少。谁能指出我正确的方向?非常感谢!

【问题讨论】:

    标签: javascript json rest api parsing


    【解决方案1】:

    这是不可能的;他们的 API 根本不支持它。如果您查看他们的官方documentation,您会注意到只有两个可能的端点:您可以获得艺术家信息,并且您可以获得特定艺术家的事件。两者都涉及指定艺术家。

    【讨论】:

    • 哦不。那真不幸。我能想到的唯一解决方法就是拉出大量艺术家名单……但这似乎很愚蠢。你能想到任何创造性的解决方法吗?谢谢兄弟。
    • 您实际上可以从他们的own website 按位置获取事件,只是他们的 API 不支持它。因此,如果您真的想要,您可以构建一个抓取工具来加载他们的网站并提取信息。据我所知,它就在 JSON 格式中,所以它应该不会困难。
    • 谢谢。我根据本教程构建了一个网络爬虫:youtube.com/watch?v=QICvAVZJKO4。它有效,但不幸的是,bandintown 网站在页面源中仅显示 18 个事件。您可以单击“显示所有”事件,但它不会反映在 html 中,这使得无法抓取超过 18 个事件。例如,在 url 上查看旧金山的事件:“bandsintown.com/…”,您可以“显示所有”事件,但页面源仅显示初始横幅 18 事件。这只是页面结构的现实吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2013-06-28
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多