Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  8 1027
Holder på å lage et nyttig lite verktøy til Wordpress, og begynner å bli ganske klar til å slippe det, men vil gjerne gjøre litt finpuss.

Hvis man tar en titt på f.ex. http://wordpress.org/extend/plugins/duplicator/, og ser videre på developers -> trunk, så finner man tekstfila med beskrivelse osv: http://plugins.svn.wordpress.org/dup...unk/readme.txt

Denne er alltid (eller skal ihvertfall være) formatert slik:

Kode

=== Plugin Name ===
blablabla... tekst om ting og tang


== Description ==

...mer tekst her
Så, hvis jeg vil ha ut f.ex. de to første avsnittene etter

Kode

== Description ==
for å bruke dem i verktøyet mitt (bruker selvsagt php) - hvordan kan jeg gjøre det da?
Hvis det du prøver å gjøre er å laste ned bare den delen av fila, så må du vite hvilken byte innholdet du vil ha begynner på og stopper på for så å sende denne informasjonen i HTTP headeren.

Men det enkleste ville nok være å bare bruke noe ala

Kode

$readme = file_get_contents(urlencode($url))
(både file_get_contents() og fopen() støtter å hente filer over HTTP), og gå gjennom fila og velge det innholdet du vil ha.
Reklamehore
atomet's Avatar
Trådstarter
Nei, jeg kan gjerne laste ned hele fila, det vil i alle fall være umulig å vite hvilke bytes ting stopper og begynner på, siden det vil variere fra plugin til plugin.

Det jeg tenker er at det såvidt jeg har forstått skal gå an å bruke php til å gå gjennom teksten (parse?), og kjenne igjen bestemte deler automatisk - f.ex

Kode

== Description==
som alltid er der, og deretter ta med all teksten fram til og med avsnitt nr 2 etter det.

Eventuelt går det å få den samme teksten fra forsiden på hver plugin også, der er det da innholdet til og med andre </p> etter <div class="block-content"> som skal med. Slik ser det da ut på f.ex. http://wordpress.org/extend/plugins/...p-to-dropbox/:

HTML-kode

<div class="block-content"><p><a href="http://wpb2d.com" rel="nofollow">WordPress Backup to Dropbox</a> has been created to give you piece of mind that your blog is backed up on a regular basis.</p>

<p>Just choose a day, time and how often you wish yor backup to be performed and kick back and wait for your websites files
and a SQL dump of its database to be dropped in your Dropbox!</p>
Så da er det dette som skulle være med:

HTML-kode

<p><a href="http://wpb2d.com" rel="nofollow">WordPress Backup to Dropbox</a> has been created to give you piece of mind that your blog is backed up on a regular basis.</p>

<p>Just choose a day, time and how often you wish yor backup to be performed and kick back and wait for your websites files
and a SQL dump of its database to be dropped in your Dropbox!</p>
Last ned teksten og gjør en av følgende ting:

Enten så må du bruke regulære uttrykk, noe ala /=== Plugin Name ===(.+)== Description==(.+)/ for åcapture teksten utifra det der. Det måantageligvis tilpasses da jeg ikke kan PHP regex.

Ellers såkan du gjøre det ganske enkelt ved åsplitte opp teksten.

Først splitter du på "== Description==", array[1] blir da teksten til description, array[0] blir del 1 inkl. tittel.

splitt del 1 på "=== Plugin Name ===" og array[1] er plugin name teksten.

Evt. er det sikkert mange andre måter, hadde du ikke brukt PHP som er crappy så kunne jeg kanskje hjulpet
Flexd: Php crappy ? Fordi?

Atomet: Jeg ville lastet ned filen og mellomlagret den f.eks i db, for så å brukt regex for å lete etter txt som kommer etter søkeordene helt til neste søkeord.

regex: (/=== Plugin Name ===(.*)== Description ==/g)
Denne plukker ut txt mellom første søkeord helt til neste.. Da har du iallefall kommet godt på vei
Du kan gjøre noe ala dette. Vet ikke hvor effektiv denne koden er, men den burde fungere

Kode

<?php
// Get text file (note this can be slow, consider caching)
$url = "http://plugins.svn.wordpress.org/duplicator/trunk/readme.txt";
$readme = file_get_contents($url);
if ($readme === false) {
	die("Could not download file");
}

// Split textfile into lines
$readme = explode("\n", $readme);
$len = count($readme);
$i = 0;

// Find the start of the description header
for (; $readme[$i] != "== Description ==" && $i < $len ; ++$i);
$start = ++$i;

// Find the first two paragraphs
for ($avsnitt = 0 ; $avsnitt <= 2 && $i < $len ; ++$i) {
	if ($readme[$i] == "") {
		++$avsnitt;
	}
}

// Result
$description = implode("\n", array_slice($readme, $start, $i - $start));
?>
Denne koden vil imidlertid bare fungere så lenge linjene er lagret i unix format (som eksempelet), så om noen av pluginsene bruker et annet format må man ta hensyn til det. Ellers har jeg bare gått ut i fra at fila vil være i rett format, og vet ikke helt hva resultatet blir om den ikke er det (forhåpentligvis en tom linje). Men dette burde få deg et stykke på veien, i alle fall.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Regex er overkill til dette. Dersom det da ikke er (små) forskjeller i "overskriften", noe jeg antar at det ikke er.
Du kan for eksempel bruke strpos.
Reklamehore
atomet's Avatar
Trådstarter
Hmmm... ok.

Har testa litt her nå, og kodesnutten til khh funker ihvertfall, men det går litt treigt. Kombiner så dette med at det er 30+ slike beskrivelser som skal lastes inn, så blir det rett og slett FOR treigt. Caching vil heller ikke være noen vits siden dette er en prosess som kun skal kjøres ved installasjon - altså EN gang. Dessuten - når jeg tittet litt nærmere etter viser det seg at endel beskrivelser er laget litt dårlig, eller avvikende, så jeg har måttet klippe ut andre deler av beskrivelsen for å få det bra. Dermed funker ikke beskrivelse-planen helt.

Så - da har jeg i stedet laget en liten tekstfil med den aktuelle beskrivelsen, lagt den i en amazon-s3-bucket, bruker get file , lagrer som en variabel, og bruker echo for å få ut variabelen. Men igjen er jo dette noe som tar litt tid, sannsynligvis rett og slett fordi det er såpass mange slike småfiler som skal lastes inn.

Og forresten - takker for tips og hjelp fra alle sammen så langt

Så da tenker jeg - enten kan jeg legge med alle beskrivelsene sammen med koden (men det syns jeg egentlig blir litt rotete), eller - ville det kanskje gå kjappere hvis jeg legger alle beskrivelsene i en enkelt fil, skiller dem f.ex. med ==plugin-navn==, og så bruker enten strpos eller regex til å plukke ut de rette bitene til hver fil derfra?
Sist endret av atomet; 23. juli 2012 kl. 14:28.
Sitat av atomet Vis innlegg
Har testa litt her nå, og kodesnutten til khh funker ihvertfall, men det går litt treigt. Kombiner så dette med at det er 30+ slike beskrivelser som skal lastes inn, så blir det rett og slett FOR treigt. Caching vil heller ikke være noen vits siden dette er en prosess som kun skal kjøres ved installasjon - altså EN gang. Dessuten - når jeg tittet litt nærmere etter viser det seg at endel beskrivelser er laget litt dårlig, eller avvikende, så jeg har måttet klippe ut andre deler av beskrivelsen for å få det bra. Dermed funker ikke beskrivelse-planen helt.
Vis hele sitatet...
Problemet er at PHP bruker en del tid, gjerne 1 - 2 sekunder, på å laste ned hver fil.

Sitat av atomet Vis innlegg
Så da tenker jeg - enten kan jeg legge med alle beskrivelsene sammen med koden (men det syns jeg egentlig blir litt rotete), eller - ville det kanskje gå kjappere hvis jeg legger alle beskrivelsene i en enkelt fil, skiller dem f.ex. med ==plugin-navn==, og så bruker enten strpos eller regex til å plukke ut de rette bitene til hver fil derfra?
Vis hele sitatet...
Begge disse alternativene vil fungere utmerket, og du vil neppe se forskjell i hvor lang tid det tar.
Jeg tror jeg ville gått for å lagre det i en enkelt fil og brukt et spessielt tegn for å skille mellom dem. Ala

Kode

plugin navn 1
Her står det om plugin 1
----
plugin navn 2
her står det om plugin 2
----
plugin navn 3
her står
det masse
om plugin 3
Og så gjort noe ala

Kode

// Load descriptions from file
$plugin_descriptions = explode("----\n", file_get_contents('plugins.txt'));


// Create assoc array
$descriptions = array();
foreach ($plugin_descriptions as $d) {
	$d = explode("\n", $d, 2);
	$descriptions[$d[0]] = $d[1];
}
unset($plugin_descriptions);
Da burde du ende opp med en array der du kan bruke $descriptions["plugin navn 1"] for å få beskrivelsen på første plugin.
edit: evt foreach ($descriptions as $plugin => $description) for å gå gjennom og skrive ut navn og beskrivelse for hver plugin.
Sist endret av khh; 23. juli 2012 kl. 15:01.