2010-12-28 2 views
3

Я использую KRL для ввода элементов в статусы временной шкалы, похожие на TwitterBook Jesse Stay. Проблема заключается в том, что эти элементы связаны только со статусами, которые в настоящее время видны при запуске букмарклета. Если новый статус добавляется через «новый твит», обновленный через Ajax или через обновления статуса через бесконечный прокрутки, эти новые статусы не затронуты.Захват обновлений хронологии статуса твиттера/бесконечных обновлений прокрутки

Есть ли способ опросить новые статусы или почувствовать событие обновления статуса Twitter через KRL, чтобы вводить элементы только в эти вновь добавленные статусы?

ответ

3

Пример размещен на

http://kynetxappaday.wordpress.com/2010/12/25/day-21-modifying-facebook-stream-with-kynetx/

работы с потоком Facebook, но концепция та же

  • создать SetTimeout бесконечный цикл ищет элементы потока
  • выбрать только потоковые элементы не маркированные как обработанные
  • элементы технологического потока
  • полоскание и повторить

пример кода из почтового

ruleset a60x512 { 
    meta { 
    name "MikeGrace-status-update-translator" 
    description << 
     MikeGrace-status-update-translator 
    >> 
    author "Mike Grace" 
    logging on 
    } 

    global { 
    datasource insult:HTML <- "http://www.pangloss.com/seidel/Shaker/index.html?" cachable for 1 second; 
    } 
    rule find_status_updates_by_mike_grace { 
    select when pageview ".*" 
    { 
     notify("Starting to look for status upates by Mike Grace",""); 
     emit <| 

     // get app object to raise web events 
     app = KOBJ.get_application("a60x512"); 

     // function that finds FB status updates by Mike Grace 
     function findMikeGrace() { 

      // loop through each stream item on the page that hasn't been processed already by the app 
      $K("li[id^=stream_story]:not(li[kfbt])").each(function() { 
      var currentStreamItem = this; 
      // grab the current stream item posters name 
      var name = $K(currentStreamItem).find(".actorName").text(); 

      // mark the stream item as being processed to reduce future processing times 
      $K(currentStreamItem).attr("kfbt","y"); 

      // is the stream item by the perpetrator? 
      if (name == "Michael Grace") { 

       // strikethrough the original update 
       $K(currentStreamItem).find(".messageBody").wrap("<strike />"); 

       // get selector to return translation of status update 
       var returnSelector = $K(currentStreamItem).attr("id"); 
       returnSelector = "li#"+returnSelector+" .messageBody"; 

       // raise web event to get translation for non geeks 
       app.raise_event("get_insult", {"returnSelector":returnSelector}); 

      } // end of checking name 

      }); // end of looping through unprocessed stream items 

      // call myself again later to process new items on the page 
      setTimeout(function() { 
      findMikeGrace(); 
      }, 9000); 
     } 

     // start the process of finding the perpetrator 
     findMikeGrace(); 
     |>; 
    } 
    } 

    rule get_insult { 
    select when web get_insult 
    pre { 
     selector = event:param("returnSelector"); 
     insulter = datasource:insult("#{selector}"); 
     foundInsult = insulter.query("font"); 
     singleInsult = foundInsult[0]; 
    } 
    { 
     emit <| 
     console.log(singleInsult); 
     $K(selector).parent().after("<br/>"+singleInsult); 
     |>; 
    } 
    } 
} 
+0

Я полагал, что бы направление мне нужно будет идти. Просто подумал, что если я могу перехватить события обновления Twitter, это может быть лучшим вариантом, чем бесконечный цикл. Спасибо за вашу помощь! – jshakespear

+0

Не могли бы вы сделать что-то подобное с действием watch()? –

+0

Я буду возиться и посмотреть, работает ли часы() ... – jshakespear

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