Überlegungen: Feedabos selber zählen statt Feedburner

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Überlegungen: Feedabos selber zählen statt Feedburner

Post by Dr. Love »

Hallo,

seit einiger Zeit mache ich mir Gedanken, wie ich meine Feedabonnenten selber zählen kann. Ich möchte aus verschiedenen Gründen meine Feeds nicht über den Feedburner laufen lassen, also muss ich selber zählen. Aber wie würde das theoretisch gehen? Eine simple Lösung (die prinzipiell wie Feedburner arbeitet) wäre:

1. Bei jedem Seitenaufruf müsste den Feed-URLs ein Zufallshash mitgegeben werden, etwa: http://domain.de/feeds/kategorie123/h5Rj7eWdFg4FkSq
2. Abonniert jemand einen Feed unter einer Adresse mit so einem Hash, kann ein beliebiges Statistiktool alle Abonnenten auseinander halten, egal, wie häufig sie ihre Feeds aktualisieren.
3. Das Feeds-Plugin kann den Hash in der URL sogar ignorieren, weil er für das Routing egal ist. Wer seine User zwingen will, Feeds nur mit einem Hash abzurufen, muss das Plugin allerdings um eine derartige Prüfung erweitern.

Man müsste also im Prinzip nur die Erzeugung der Feed-URLs anfassen. Oder habe ich da einen Denkfehler gemacht? Die statistische Aufbereitung ist dann Sache des Lieblinks-Statistik-Tools.

Ich habe jetzt nicht nachgesehen:
Werden die Feed-URLs im Core erzeugt oder macht das ein Plugin?
Gibt es vielleicht sogar einen Hook dafür?
Wäre es viel Aufwand, das zu implementieren?
Hätte eine solche Änderung überhaupt eine Chance, in den Core oder ein offizielles PlugIn zu kommen?

Grüße aus dem bösen Düsseldorf,
Dr. Love
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Überlegungen: Feedabos selber zählen statt Feedburner

Post by garvinhicking »

Hi!

Ist das so, dass Feedburner unique IDs für die RSS Feeds erzeugt? Sowas habe ich bisher noch nie gesehen, sondern immer nur URLs wie http://feeds.feedburner.com/peruns-weblog -- also komplett ohne Hash.

Deine Methode würde grundsätzlich klappen, aber damit würdest du nur neue subscriber zählen und könntest nicht die bestandsuser halbwegs auseinanderhalten können.
Werden die Feed-URLs im Core erzeugt oder macht das ein Plugin?
Das macht der s9y core, siehe include/functions_permalinks.inc.php die serendipity_feed*URL() Funktionen und weitere. Aber die jeweilige Plugins etc. sprechen diese Funktionen natürlich auch nur an, die könnte man im jeweiligen Plugin austauschen und stattdessen seine eigene funktion nutzen.

Die Feed-URL in der index.tpl kann man ja auch manuell setzen, bzw. durch eigene Funktionen.
Wäre es viel Aufwand, das zu implementieren?
Ich sehe da durchaus etwas Aufwand. Schwierig ist es nicht, nur mit viel Fummelei und Testen verbunden.

Wenn der core oder ein plugin entsprechendes usertracking anbieten könnte, würde ich das durchaus aufnehmen wollen, ja.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Post by Dr. Love »

Feedburner und Hashes:
Hmm stimmt. Die Feeds haben keinen Hash. Ich hab nur die URLs unter den Artikeln immer für einen Hash gehalten, kann aber sein, dass das nur der Bezeichner für den Artikel ist. Beispiel: Bei preisbock.de im Artikel von heute lautet die URL zum Beitrag http://feeds.feedburner.com/~r/Preisbock/~3/275209627/. Hab da wohl was verwechselt.


Nur neue Abonnenten zählen:
Ja das stimmt, da müsste man mit leben.


Feedurl in der index.tpl:
Das ist doch mal nen simpler Ansatz. Hab mir gerade folgende quick'n'dirty Lösung sagen lassen:

Code: Select all

{''|uniqid}
und

Code: Select all

{php}uniqid();{/php}
scheitern aber leider beide am secure mode. Andere Vorschläge?
Aber es ist m.E. sowieso keine wirklich allgemeingültig gute Idee, soetwas im Template zu erledigen, also doch in den Core?


Implementierungsaufwand / Aufnahme in den Core:
Den größten Mehraufwand sehe ich darin, das ganze ab/anschaltbar zu machen. Also quasi ein Haken "Zufallshash ankleben" neben das Konfigfeld für die Feed-URL und die dazugehörige Abfrage beim erzeugen der Feed-URL.

Wobei ich gerade sehe, dass man so oder so das Template anfassen muss, da der Rest der Feed-URL da fest drin steht (zumindest im Freshy-Template):

Code: Select all

href="{$serendipityBaseURL}{$serendipityRewritePrefix}feeds/index.rss2"


--
P.S. @Garvin: Gerne ein Match bei Gelegenheit 0344 9426 5861
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Post by Dr. Love »

So, hab etwas gebastelt und ein simples Smarty-Plugin für uniqid geschrieben. Die Datei muss "function.uniqid.php" heißen und im plugin-Ordner von Smarty (/bundled-libs/Smarty/libs/plugins) abgelegt werden.

Code: Select all

<?php 
/** 
* Smarty plugin 
* @package Smarty 
* @subpackage plugins 
*/ 

/** 
* Smarty uniqid plugin 
* 
* Type: function
* Name: uniqid
* Purpose: just call and return PHP's uniqid function
* @author Gregor Nathanael Meyer (Gregor(at)der-meyer.de)
* @return string 
*/ 
function smarty_function_uniqid() 
{ 
	return uniqid(); 
} 
?>
Trivial, ich weiß. Jetzt kann man aber ganz einfach im Template folgendes machen:

Code: Select all

href="{$serendipityBaseURL}{$serendipityRewritePrefix}feeds/index.rss2/{uniqid}"

Leider ist das erst die halbe Miete, denn in der Klasse serendipity_syndication_plugin (in /include/plugin_internal.inc.php) gibt es eine Funktion "generate_content", die die Links in der Sidebar erzeugt. Und die müsste entsprechend angepasst werden. Da das den Core betrifft und ich von eigenen Änderungen am Code rein gar nichts halte (weil sie bei Update verschütt gehen), schalte ich für mich diese Box einfach ab. Etwas rabiat, aber wirkungsvoll.

@Garvin: Falls Du Lust hast, das bei Gelegenheit zu implementieren, würde ich vorschlagen, in der Funktion serendipity_rewriteURL eine config-Eigenschaft abzufragen, bei deren Aktivierung bei Feeds hinten an die URL noch ein uniqid() anhängt wird, also etwa so:

Code: Select all

function serendipity_rewriteURL($path, $key='baseURL', $forceNone = false) {
    global $serendipity;
    return $serendipity[$key] . ($serendipity['rewrite'] == 'none' || ($serendipity['rewrite'] != 'none' && $forceNone) ? $serendipity['indexFile'] . '?/' : '') . $path . ($serendipity['rsshash'] ? '/' . uniqid() : '');
}



Aktuell stört es S9Y nach einem Schnelltest scheinbar nicht, wenn hinten an der Feed-URL noch ein Hash dran hängt, zumindest nicht, wenn mod_rewrite benutzt wird.


Kommentare?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Das sieht doch eigentlich ganz sinnvoll aus. Den Smarty secury mode schaltest du übrigens über eine config.inc.php aus, die du in dein templateverzeichnis packst:

Code: Select all

<?php
$serendipity['smarty']->security = false;
Das Seitenleistenplugin ist ja eigentlich recht stupide, da würde ich am ehesten entweder ein eigenes mini seitenleistenplugin schreiben dass deine gehashten URLs ausgibt, oder das direkt in deiner entries.tpl verdrahten. Den Hash in die URL aufzunehmen wird jeweils mit/ohne url-rewriting ander aussehen, da bin ich jetzt noch nicht ganz überzeugt das so in den Code aufzunehmen. Zumal man auch immer manuell das index.tpl template bearbeiten muss für die Hashes bin ich noch nicht so richtig glücklich eine derartige Modifikation aufzunehmen, zumal auch die Hashes in der URL etwaige Cache-Proxies ziemlich aushebeln...

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Post by Dr. Love »

Naja, den secure Mode schalte ich lieber nicht aus, das mit dem Plugin ist m.E. auch eleganter.

Neues Plugin für die Seitenleiste würde ich als Hack empfinden, würde aber gehen.

Hmm, die Funktion an sich halte ich für sehr attraktiv, ob es die Mühe wert ist, das zu implementieren?

Dass die Feed-URL in der index.tpl manuell eingetragen wird, finde ich soweiso etwas fragwürdig... Dadurch hatte ich schon mal massive Probleme mit meinem Feed, bis ich das rausgefunden habe. Könnte man nicht eine Smarty-Funktion schreiben, die als Wrapper für das normale URL Rewrite fungiert?

Dass die Hashes chaching-Proxies aushebeln ist tatsächlich ein lästiger Nebeneffekt. Deswegen sollte das auch unbedingt konfigurierbar sein und standardmäßig aus.

Gruß,
Dr. Love
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

Natürlich könnte man das in der index.tpl mit einer eigenen Variable verändern. Dabei müsste man dann aber auch alle s9y templates anpassen, die das benutzen, das ist natürlich was aufwand da man die user dann auch dazu bringen müsste ihre eigenen templates zu verändern. Ich weß nicht ob der Aufwand das alles für ein Feature rechtfertigt, das vermutlich selten genutzt wird (da feedburner einfach generell viel mehr kann und keine so umständlichen änderungen erfordert).

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Post by Dr. Love »

Man müsste seine Templates ja nicht ändern, wenn man das Feature nicht benutzt. Die aktuelle halb hartgecodete Variante funktioniert ja weiterhin.

Ich probier noch mal rum, wie das bei ausgeschaltetem Rewrititing gemacht werden müsste. Großartig anders wird das ja nicht sein. Ich meld mich demnächst noch mal.

Gruß,
Dr. Love
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Post by Dr. Love »

So, aus aktuellem Anlass noch mal kurz erläutert:

Wünschenswert wäre eine einschaltbare Möglichkeit, einen zufälligen Hashwert an alle generierten Links zu den Feeds anzuhängen. Dann könnte man in einer beliebigen statistischen Auswertung einzelne Abonnenten auseinanderhalten und damit die Anzahl der Feedleser halbwegs präzise messen. Standardmäßig müsste die Funktion ausgeschaltet sein, weil sie ggf. Seiteneffekte bei Cache-Proxies und wer weiß noch wo erzeugt. Wer das nutzen möchte, muss das in Kauf nehmen.

Zu tun wären einige kleinere Änderungen am Core in der Funktion, die die Feedlinks (z.b. in der Sidebar) erzeugt. Weiters muss, wer die Funktion einsetzen will, sein Template-Header anpassen, da dort die Feedlinks leider hardcodiert sind (warum eigentlich?).

Warum kein Feedburner? Ganz einfach: Meine Nutzerdaten gehen nur mich etwas an und nicht irgendwelche kostenlosen Dienstleister.

Gruß,
Dr. Love
Dr. Love
Regular
Posts: 79
Joined: Wed Jun 21, 2006 5:29 pm
Location: Düsseldorf, Germany
Contact:

Re: Überlegungen: Feedabos selber zählen statt Feedburner

Post by Dr. Love »

Ich habe in meinem Blog nun einen Prototypen eines Feedcounter PlugIns laufen. Bei jedem Feedaufruf wird einfach das Datum der letzten Aktualisierung der jeweiligen ID aktualisiert und ein Counter hochgesetzt. Der zweite Teil des PlugIns schreibt einfach eine kurze Meldung ins Dashboard, wieviele unterschiedliche IDs innerhalb der letzten X Tage einen Feed abgeholt haben. Mehr nicht, aber das reicht mir auch fürs erste. Wer mehr will, nimmt Feedburner her oder eine andere externe Lösung.

Das Kernproblem ist weiterhin, dass die Feedlinks von S9Y hartkodiert sind und man den Core und das Template hacken muss, um da einen Hash anzuhängen. Deswegen wird das nicht als PlugIn veröffentlicht werden können. Selbst wenn die Links wie oben angesprochen im Core PlugIn serendipity_syndication_plugin korrekt erzeugt würden, bliebe noch das Problem mit den Links im Header der Templates und der nötigen Smarty Funktion.

Ich habe meinen Prototypen seit gestern im Einsatz und bisher scheint er genau das zu tun, was er soll: Eine simple Zahl ausspucken, wieviele Feedleser man hat.
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Überlegungen: Feedabos selber zählen statt Feedburner

Post by garvinhicking »

Hi!

Hm, ja, die Sache ist wirklich doof dass man sie nicht einfach als plugin realisieren kann, da die ganzen Templates den RSS-Feed nicht variabel einsetzen. Da fällt mir auch so spontan keine richtige Lösung zu ein... man könnte halt per JavaScript in der DOM rumfummeln um den unique Token einzubauen, aber das fühlt sich schon dirty an.

Eine Weiterleitung innerhalb der rss.php bringt ja verutlich nichts, weil die Leute dann immer noch den ursprünglichen Link nutzen würden und nie ihren Token übermittelten...

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply