Du bist hier:Start»Javascript»Greasemonkey»Heise-Skript

Greasemonkey-Skript für Heise-Bewertungen

Letze Aktualisierung: 15.05.2015.

Download des Greasemonkey-Plugins für Firefox.
Download des Greasemonkey-Userskripts "heise.user.js".

Mit dem Greasemonkey-Plugin für den Firefox-Webbrowser und dem Userskript "heise.user.js" können Bewertungen für Berichte auf der Nachrichten-Website heise.de abgegeben und als Balken unter den Berichten von heise.de angezeigt werden. Bei den Bewertungen geht es darum die Relevanz der Berichte zu beurteilen und nicht inhaltliche Meinungen abzugeben. Ziel ist es inhaltsarme Berichte, die eher wie Werbung aussehen, herauszufiltern und interessante Berichte hervorzuheben. Weitere Informationen befinden sich hier.

Das Userskript heise.user.js als Quellcode zum Überfliegen:

// ==UserScript==
// @name        heise
// @namespace   heise
// @include     http://www.heise.de/*
// @include     http://heise.de/*
// @version     1.2
// @author      Torsten Tränkner
// @grant       GM_xmlhttpRequest
// @grant       GM_log
// ==/UserScript==

var downloadCounter 0;
var 
filesToDownload 0;
var 
globalResults "";
var 
loadedRatings = {};
var 
webpageMap = {};
var 
setRatingAtNoClassLink false;
var 
CLUSTER_SIZE 10000;

function 
insertAfter(newNodereferenceNode) {
  
referenceNode.parentNode.insertBefore(newNode,
    
referenceNode.nextSibling);
}

function 
loadFunction(webpage_idobject) {
  
webpage_filename webpage_id - (webpage_id CLUSTER_SIZE);

  
// check if already loaded
  
if (! (webpage_filename in loadedRatings)) {
    
loadedRatings[webpage_filename] = webpage_filename;
    
filesToDownload++;
  }
}

function 
scanLinks(innerFunction) {

  var 
objects document.evaluate(
    
"//a[contains(@href, '/meldung/')]"documentnull,
    
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPEnull);

  for (var 
0objects.snapshotLengthi++) {
    
object objects.snapshotItem(i);
    if (
object.href.match(/.*\/meldung\/.*-[0-9]{7}\.html.*/)) {
      if ((
object.className != "") || (setRatingAtNoClassLink == true)) {
        var 
regular_expression = /.*-([0-9]{7})\.html.*/g;
        var 
match regular_expression.exec(object.href);
        var 
webpage_id match[1];

        
innerFunction(webpage_idobject);
      }
    }
  }
}

function 
addRating(webpage_idobject) {
  
like 0;
  
dislike 0;

  if (
webpage_id in webpageMap) {
    
rating webpageMap[webpage_id].split(",");
    
like parseInt(rating[0]);
    
dislike parseInt(rating[1]);
  }

  var 
newDiv document.createElement("div");

  
sum like dislike;

  
// alert("sum: " + sum + " " + like);

  // display a rating bar below the link
  
if (sum != 0) {
    
positivePercentage = (like 100) / sum;
    
// negativePercentage = 100 - positivePercentage;

    // display red bar with green from the left
    
newDiv.innerHTML =
      
"<div style='clear:both; display:block; height: 5px;" +
      
" background: #ff0000;'><div style='width: " positivePercentage +
      
"%; background: #00ff00;height: 5px; float:left'></div></div>" +
      
"<div style='clear:both; display:block;'><div style='float:left'>" +
      
like "</div><div style='float:right'>" +
      
dislike "</div></div><div style='clear:both'></div>";

  } else {
    
newDiv.innerHTML "<div style='display:block; clear:both; " +
      
"height:5px; width:100%; background: #ffd700;'></div>";
  }

  
newDiv.style.width "100%";

  
insertAfter(newDivobject);
}

function 
displayRatings() {
  
// alert("displayRatings:\n" + globalResults);

  
var lines globalResults.split("\n");

  for (
index 0index lines.length 1; ++index) {
    
singleWords lines[index].split(" ");
    
webpageMap[singleWords[0]] = singleWords[1] + "," singleWords[2];
  }

  
scanLinks(addRating);
}

function 
loadRatings(webpage_filename) {

  
url "http://torsten-traenkner.de/bewertungen/get.php?id=" +
    
webpage_filename;

  
GM_xmlhttpRequest({
    
method"GET",
    
urlurl,
    
timeout6000,
    
onload: function(response) {
      
// alert("loaded");
      
loaded false
      
if ((response.readyState == 4) && (response.status == 200)) {
        
globalResults globalResults response.responseText;
      }
      
downloadCounter++;
      if (
downloadCounter == filesToDownload) {
        
displayRatings();
      }
    },
    
onerror: function(response) {
      
downloadCounter++;
      if (
downloadCounter == filesToDownload) {
        
displayRatings();
      }
    },
    
ontimeout: function(response) {
      
downloadCounter++;
      if (
downloadCounter == filesToDownload) {
        
displayRatings();
      }
    }
  });
}

// add a rating option to the article

if (window.location.href.match(/.*\/meldung\/.*-[0-9]{7}\.html.*/) ||
    
window.location.href.match(/.*\/artikel\/.*-[0-9]{7}\.html.*/))
{
  
// alert("URL matched");

  
var regular_expression = /.*\/meldung\/.*-([0-9]{7})\.html.*/g;
  var 
match regular_expression.exec(window.location.href);
  var 
webpage_id match[1];

  
// create iframe for the rating
  
var newIframe document.createElement("iframe");
  
newIframe.setAttribute("src",
    
"http://torsten-traenkner.de/bewertungen/?webpage_id=" webpage_id);
  
newIframe.setAttribute("scrolling""yes");
  
newIframe.style.border "none";
  
newIframe.style.width "530px";
  
newIframe.style.height "530px";

  var 
objects document.evaluate(
    
"//*[@class='article-footer']"documentnull,
    
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPEnull);

  var 
firstObject objects.snapshotItem(0);

  
firstObject.parentNode.insertBefore(newIframefirstObject);

}

// show the ratings
else if ( (window.location.href.match(/heise.de[/]$/)) ||
          (
window.location.href.match(/heise.de\/.*[/]?seite=[0-9]*$/)) ||
          (
window.location.href.match(/heise.de\/thema\/[^/]*$/)) ||
          (
window.location.href.match(/heise.de\/.*[/]$/)) )
{
  
// alert("heise");

  
if ( (window.location.href.match(/heise.de\/newsticker/)) ||
       (
window.location.href.match(/\/news\//)) )
  
{
    
setRatingAtNoClassLink true;
  }

  
scanLinks(loadFunction);

  for (var 
key in loadedRatings) {
    if (
loadedRatings.hasOwnProperty(key)) {
      
loadRatings(key);
    }
  }

}

Viel Spaß beim Ausprobieren des Skripts ! Falls noch etwas unklar sein sollte, dann kannst du die Kommentar-Funktion benutzen.
Patches sind willkommen.

Kommentar schreiben