Разрешить доступ к содержимому моего блога Tumblr другой странице

Я пытаюсь скопировать весь фактический контент из моего блога Tumblr, используя сценарий, который я написал на другой веб-странице, но у меня возникли некоторые проблемы с получением доступа к контенту. Мой вызов ajax выглядит следующим образом:

$.ajax({
     url: "http://solacingsavant.tumblr.com/",
     dataType: 'jsonp',
     success: function(data) {
          var elements = $("<div>").html(data)[0].getElementsByTagName("ul")[0].getElementsByTagName("li");
          for(var i = 0; i < elements.length; i++) {
               var theText = elements[i].firstChild.nodeValue;
               alert(theText); // Alert if I got something
              // This is where I'll strip the data for the items I want
          }
     }
});

но поскольку консоль выдает мне ошибку «Ресурс интерпретируется как сценарий, но передается с типом MIME text/html», который Я заглянул сюда и безуспешно изменил соответствующий тег meta в HTML моего блога на <meta http-equiv="Content-Type" content="application/javascript; charset=utf-8" />

Я также пытался использовать dataType: 'html' (что имеет для меня больше смысла), но я получал консольную ошибку «Происхождение не разрешено Access-Control-Allow-Origin» который я также изучил и добавил метатег в свой блог Tumblr с <meta Access-Control-Allow-Origin="*" />, но снова не удалось

Вот jsFiddle для работы

Мой подход не работает, потому что Tumblr в целом не позволяет вносить изменения в Access-Control? Если да, то как я могу обойти эту проблему? Если нет, то что я делаю неправильно?

БОЛЬШОЕ ИЗМЕНЕНИЕ (на основе полезных комментариев mikedidthis)

Кажется, я не могу сделать это без API Tubmlr, поэтому я получил ключ API и теперь имею доступ к результатам json, которые отправляет API. Я могу получить объект jsonp, используя ключ API в консоли. Мой javascript на данный момент:

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/info?api_key=APIkeyGoesHeRe",
    dataType: 'jsonp',
    success: function(results){
        console.log(results); 
        // Get data from posts here
    }
});

Это сообщение SO помогло понять, как я могу изменить данные на моей странице Tubmlr из источника и узнать основную информацию о сайте, но не о том, как получить актуальные данные из отдельных сообщений. Я попытался просмотреть объект results и не смог найти никаких данных, связанных с сообщениями, а также не смог добавить результаты в jsfiddle. Итак, мои вопросы теперь таковы: "Могу ли я копировать данные (скажем, письменный текст в сообщении) из отдельных сообщений, используя этот подход? Если да, то как? Если нет, какой другой подход мне следует использовать?"


person Zach Saucier    schedule 14.10.2013    source источник
comment
КОРС. Вам нужно будет использовать официальный API для получения вашего контента: tumblr.com/docs/en /апи/v2   -  person mikedidthis    schedule 15.10.2013
comment
Вы могли бы использовать старый API, который не требует аутентификации, но его можно было вытащить в любое время.   -  person mikedidthis    schedule 15.10.2013
comment
Так что, даже если это мой личный сайт, я не могу разрешить доступ к нему для внешних страниц?   -  person Zach Saucier    schedule 15.10.2013
comment
афаик нет. Поскольку сайт tumblr не твой? Вы хотите добавить контент из Tumblr на свой сайт. Открытие доступа к вашему сайту здесь не поможет?   -  person mikedidthis    schedule 15.10.2013
comment
Я имел в виду, что даже если у меня есть доступ к коду Tumblr (поскольку я являюсь автором), у меня нет возможности разрешить доступ к нему сайту, не относящемуся к Tumblr?   -  person Zach Saucier    schedule 15.10.2013
comment
Верный. Возможно, вы являетесь автором кода темы, но хотите получить данные Tumblrs для своих сообщений. Даже если вы их написали, вам все равно нужно использовать API для доступа к ним за пределами Tumblr. Надеюсь, это поможет.   -  person mikedidthis    schedule 15.10.2013
comment
@mikedidthis Спасибо за понимание! Это невероятно полезно и направило меня в правильном направлении. Теперь я обновил свой вопрос с учетом текущей ситуации, не стесняйтесь посмотреть и посмотреть, есть ли у вас еще какие-либо отзывы.   -  person Zach Saucier    schedule 15.10.2013


Ответы (1)


Очень быстрый ответ

Документация API tumblr действительно хорошо описывает использование API, однако, чтобы дать вам небольшое начало, давайте захватим все ваши текстовые сообщения.

Сначала вам нужно запросить у API любое из ваших сообщений типа Текст.

В документации указано (http://www.tumblr.com/docs/en/api/v2#posts), что мы должны использовать следующий URL-адрес и указать тип, который мы установим на text:

api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts[/type]

А ниже приведен пример, основанный на скрипке OP.

$.ajax({
    url: "http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/text?api_key=XXXXXXX",
    dataType: 'jsonp',
    success: function(data){
        posts = data.response.posts
        $.each(posts, function(i) {
            console.log( posts[i].title, posts[i].body )
        });
    }
});

Таким образом, на каждый запрос API мы будем получать объект. Вам нужно будет отфильтровать этот объект, чтобы получить от него нужные данные.

В контексте почтовых запросов вы можете напрямую обращаться к своим сообщениям, используя объект data.response.posts.

Чтобы узнать, какие данные доступны для каждого типа сообщений, обратитесь к документации: http://www.tumblr.com/docs/en/api/v2#text-posts

Чтобы получить содержимое для каждого из типов сообщений Text, вам нужно пройтись по объекту posts, а затем получить значение для ключа с именами title и body.

Пример здесь: http://jsfiddle.net/ZpFwL/

Бонусное время Можно получить сообщения для всех типов, убрав type из URL-адреса:

http://api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts/?api_key=XXXXXXX"

Помните, что это действительно быстрый пример, а не для реального мира.

person mikedidthis    schedule 15.10.2013
comment
Хороший ответ, я считаю, что это правильно. Изучив больше документации, кажется, что мне нужно делать разные вызовы ajax для каждого типа сообщений, которые воняют. Пожалуйста, дайте мне знать, если это не так! - person Zach Saucier; 15.10.2013
comment
Нет, вы можете подделать его, удалив тип: api.tumblr.com/v2/blog/solacingsavant.tumblr.com/posts?api_key=xxx Однако вам нужно будет создать функцию фильтра для каждого типа сообщений. - person mikedidthis; 15.10.2013
comment
Без проблем. Ради интереса, почему бы просто не использовать Tumblr в качестве основного сайта? Мой вопрос основан на том, что вы не знаете, какой контент вы переносите с Tumblr на свой сайт. - person mikedidthis; 15.10.2013
comment
Моя конечная цель — скопировать все содержимое любого блога Tumblr, когда владелец вводит URL-адрес автономного ресурса, отфильтровывая ненужные части. Я просто не знаком с API Tumblr (очевидно), поэтому я решил создать его, используя технику, которую я знаю, а затем, возможно, создать настоящий API - person Zach Saucier; 15.10.2013
comment
Что-то вроде этого: boutofcontext.com/tumblr_backup.php Стоит также упомянуть, что каждый Tumblr имеет RSS-канал: solacingsavant.tumblr.com/rss, который можно использовать для удаления? - person mikedidthis; 15.10.2013
comment
Конечно, но, надеюсь, лучше отформатировано и тому подобное. Я надеюсь иметь два дополнительных конечных продукта (выбранных путем выбора с использованием одного и того же приложения), использующих его: один прямой HTML, такой как тот, который вы дали, а другой больше похож на книгу (возможно, в формате PDF или что-то подобное) только с текстом и фотографиями с каждого поста, который можно распечатать. И да, я знаю о RSS-канале, в данный момент я работаю над книжной версией, поэтому мне нужно разбить ее дальше и более организованно. - person Zach Saucier; 15.10.2013