2015-08-11 2 views
0

Я провел исследование по форумам, и я запутался. Мой демонстрационный проект был создан с помощью Alloy MVC. Я хочу разобрать JSON из Youtube API с высшими выпущенными видео Cooking, например, и показать их в TableView. Может ли кто-нибудь дать мне инструкции, как это сделать? Я новичок.Titanium Appcelerator parse Youtube JSON с API

Это мой код, что я сделал до сих пор:

Видео XML

<Alloy> 
<Window class="container"> 
<View id="main" onClick="youtubeFeed"> 
    <Label class="header">YouTube Channel</Label> 
      <TableView id="results"> 

      </TableView>    
     </View> 
    </Window> 
</Alloy> 

Videos.js

function youtubeFeed() { 

var apiKey = 'MY_API_KEY'; 
var perPage = 6; 
var search = "Cooking"; 
var description; 
var val; 
var id; 
var category = "News"; 

var query = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=search&maxResults=per_page&videoCategoryId=category&safesearch=strict&key=apikey'; 
var response = JSON.parse(this.responseText); 

require("/api").create({ 
    url: query, 
    type: "GET", 
    success: onSuccess, 
    error: onError 
}); 

function onSuccess(e){ 
    console.log(e.data); 
} 

function onError(e){ 
    console.log("error"); 
} 

} 

ответ

2

вам нужно вызвать фактический API URL с помощью ххр. Для начала посмотрим на https://github.com/m1ga/titanium-libraries/blob/master/api.js

Создать Lib папку в Projectname/приложение/папку и поместите файл JS там и затем вызвать ее так внутри функции йор:

require("/api").create({ 
    url: query, 
    type: "GET", 
    success: onSuccess, 
    error: onError 
}); 

function onSuccess(e){ 
    console.log(e.data); 
} 

function onError(e){ 
    console.log("error"); 
} 

и убедитесь, что ваш строка запроса правильная. Похоже, вы взяли пример php, потому что он использует $ и a. в конце конкатенации.

+0

Большое спасибо за быстрый ответ. Я также изменил строку запроса, как вы упомянули, потому что я использовал пример php. К сожалению, я не смог заставить его работать. –

+0

это поможет, если вы сообщите нам, что такое ошибка или где вы застряли – miga

+0

У меня нет ошибок, но ничего не появляется, когда я запускаю ее на эмуляторе. Извините за глупый вопрос. Мне нужно что-то еще, чтобы разобрать JSON на TableView, который у меня есть в моем XML? –

2

Я не уверен, какую библиотеку вы используете для получения JSON, но разбор JSON не работает, прежде чем вы его получите.

Это простой пример того, как он должен работать:

var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=search&maxResults=per_page&videoCategoryId=category&safesearch=strict&key=apikey'; 
var xhr = Titanium.Network.createHTTPClient({ 
    onload: function() { 
     var response = JSON.parse(this.responseData); 
     // you've got your JSON here, after the API call succeeded 
    }, 
    timeout: timeout 
}); 
xhr.open('GET', url); 
xhr.send(); 
3

У вас есть свой JSON ответ от Youtube API, теперь, когда Miga и Рене дал вам намеки.
Есть некоторые guides, которые вы, возможно, захотите прочитать, чтобы узнать, как выглядит объект JSON при возврате с Youtube (используйте их API-интерфейс).

Чтение Titanium.UI.TableView документации, вы должны добавить TableViewRow для каждого элемента в response.items:

for (var i=0; i<response.items.length; i++){ 
    var video, row, videoTitle; 

    video = response.items[i]; 

    row = Ti.UI.createTableViewRow({ 
     width: Ti.UI.FILL, 
     height: 100 
    }), 

    videoTitle = Ti.UI.createLabel({ 
     text: video.snippet.title, 
     videoId: video.id.videoId, // custom prop 
     width: Ti.UI.SIZE, 
     height: 80 
    }); 
    row.add(videoTitle); 

    $.results.appendRow(row); 
} 

Слушайте click событий из вашего TableView, так что вы можете открыть новый контроллер для воспроизведения заданного видео:

$.results.addEventListener('click', function onClick(event) { 
    var row = event.row, 
     videoId = row.videoId; 
    // TODO... 
}); 

Удачи вам!

Смежные вопросы