Jump to content
php.lv forumi

apjomīgi XML feedi priekš testiem


404

Recommended Posts

Ir radusies vajadzība pēc kādiem pamatīgākiem(vēlams simtos MB) XML feediem priekš testiem.Ir sastopami kādi saiti,kuri ko tādu servē online bez reģistrācijas? Valoda un saturs nebūtu svarīgi.Pačekoju,ka Stack Overflow piedāvā ap 500MB dumpu,bet zipotu, Wikipedia >30Gb velk uz otru galējību,bet internetveikali un rentail saiti parasti dod pieejas tikai klientiem.Būšu pateicīgs,ja kādam ir krājumā kādas saites ar ko padalīties :)

Link to comment
Share on other sites

Gribējās patestēt parseri uz reāliem,bet apsveru arī tādu domu,ja nekas piemērots neatradīsies.Ir jau pašam pa kādam nelielam,bet ģenerēt pārsimts megus ar randoma contentu nav iekāriena klasi rakstīt :D

Edited by 404
Link to comment
Share on other sites

Pie maza jā,bet kur ņemt saturu katram tagam,ja tam ir jābūt unikālam,un rezultāts iet kā update iekš db? Ģenerēt randoma ciparus ? :D Nu ir man viens tāds XML ap 97 000 rindām. Izmērs ap 3MB. Jau tādu saģenerēt no izdomātiem datiem būtu problēmas.Es nestādos priekšā,kā to izdarīt 100 reizes lielākam.

Link to comment
Share on other sites

Datus ģenerēt nemaz nav grūti. Reku piemērs no mana koda:

public function actionRandomUsers(){
$names=array('Eriks','Jānis','Juris','Imants','Pauls','Alberts','Uldis','Miervaldis','Ernests',
	'Rūdolfs','Fricis','Māris','Aleksandrs','Alfreds','Roberts','Arturs','Andris','Valdis','Atis','Kārlis');
$last_names = array('Ādamsons','Akuraters','Bankovskis','Barons','Bels','Birznieks-Upītis',
	'Blaumanis','Brīvzemnieks','Čaklais','Čaks','Eglītis','Grīns','Jaunsudrabiņš',
	'Kolbergs','Lācis','Pumpurs','Skalbe','Sudrabkalns','Vācietis','Ziedonis');
$emails=array('@inbox.lv','@gmail.com');

for($i=0;$i<200;$i++){
	$user = new User();
	$user->first_name=$names[array_rand($names)];
	$user->last_name=$last_names[array_rand($last_names)];
	$user->email=$user->first_name.'.'.$user->last_name.$emails[array_rand($emails)];
	$user->phone=rand(11111111,99999999);
	$user->type=1;
	$user->save();
}
}

Uztaisi sev lielāku vārdu masīvu un ņem pa kādiem 20 random vārdiem katram tagam, būs gana unikāls saturs.

Link to comment
Share on other sites

Arī variants :) Šis uzvedināja uz ideju vienkārši sasplitot vārdus arrayā no lorem ipsum vai kaut vai kādas ziņu lapas rindkopas.Tur varētu būt pietiekami. Lab,šim būtu ideja atrasta. No gatavajām vēl iedomājos,ka mūsu pašu kāda vairumnieku bāzes produktu liste vēl varētu būt piemērota (varbūt kādam kaut vai veca ir aizķērusies?) Ja nemaldos,tad GNT un kas nu tur vēl bija,arī izmērs ir iespaidīgs.

Link to comment
Share on other sites

Rincewind pasvieda ideju... uztaisīju Savu implentāciju.

 

public function populate_users($count, $is_unique = false) {

$names = array(
	'James', 'John', 'Robert', 'Michael', 'William', 'David',
	'Richard', 'Charles', 'Joseph', 'Thomas', 'Christopher',
	'Daniel', 'Paul', 'Mark', 'Donald', 'George', 'Kenneth',
	'Steven', 'Edward', 'Brian', 'Ronald', 'Anthony', 'Kevin',
	'Jason', 'Matthew', 'Gary', 'Timothy', 'Jose', 'Larry',
	'Jeffrey', 'Frank', 'Scott', 'Eric', 'Stephen', 'Andrew',
	'Raymond', 'Gregory', 'Joshua', 'Jerry', 'Dennis', 'Walter',
	'Patrick', 'Peter', 'Harold', 'Douglas', 'Henry', 'Carl',
	'Arthur', 'Ryan', 'Roger'
);

$surnames = array(
	'Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis',
	'Miller', 'Wilson', 'Moore', 'Taylor', 'Anderson', 'Thomas',
	'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia',
	'Martinez', 'Robinson', 'Clark', 'Rodriguez', 'Lewis', 'Lee',
	'Walker'
);

if ($is_unique === false) {

	for ($i = 0; $i < $count; ++$i) {
		$people[] = $names[mt_rand(0, count($names) - 1)] . ' ' . $surnames[mt_rand(0, count($surnames) - 1)];
	}

} else {

	if (count($names) * count($surnames) < $count ) {

		throw new Exception('Can\'t generete so many unique results! Try to set \'$is_unique\' to false.');

	}

	for ($i = 0; $i < count($names); ++$i) {	
		for ($j = 0; $j < count($surnames); ++$j) {
			$people[] = $names[$i] . ' ' . $surnames[$j];
		}
	}

	shuffle($people);

	$people = array_slice($people, -$count);

}

return $people;

}

 

Tiek ģenerēti pilnie vārdi. Vārdi un uzvārdi ir plaši sastopami Amerikā... tā kā var pat uzģenerēt kādu!

 

Izmantošana:

 

$people = populate_users(10, true);

$output = '';
foreach ($people as $key => $person) {
$output .= $person . '<br />';
}

Link to comment
Share on other sites

Pie maza jā,bet kur ņemt saturu katram tagam,ja tam ir jābūt unikālam,un rezultāts iet kā update iekš db?

 

un kāpec gan tie nevarētu būt cipari ?

ja tagi ģenērējas ar ciklu, tad vienkārši izmanto to pašu cikla skaitītāju, + var pielikt kaut kādus vārdus no masīva

ar garantiju, ka visi dati būs unikāli ..

Link to comment
Share on other sites

Nu ar jau it kā varētu,kaut vai time() + $i pielikt.Vienīgi db tad baigā putra būtu,ka neko nevar saprast.Reālam fīdam vismaz smuki var kontentu atškirt un pasekot kas ir importēts,un kas varbūt trūkst.Tāpat nāk kādiem tagiem atribūti,subkategorijas u.t.t,ko būtu interese iebarot. Lai nu kā,bet pati ideja jau der tīri labi.Neizdevās man Stackoverflowa dumpu līdz galam novilkt.Kad izdosies,patestēšu uz šamo kā stress testu.Vajadzētu pilnībā pirmajam aplauzienam pietikt :)

Link to comment
Share on other sites

Nu ar jau it kā varētu,kaut vai time() + $i pielikt.Vienīgi db tad baigā putra būtu,ka neko nevar saprast.Reālam fīdam vismaz smuki var kontentu atškirt un pasekot kas ir importēts,un kas varbūt trūkst.

Izmantojot cikla skaitītāju tieši 'putru' var novērst, jo:

1. zināsi kurā brīdī parādās kļūda - reāli cik daudz tagu tika apstrādāts

2. atsevišķiem tāgiem taču var pielikt tāga nosaukumu - piem: "kategorija_1_99999n", "subkategorija_10_99999n".

3. zināsi precīzi cik daudz datu ir - nevis pēc apjoma Mb, bet pēc skaita

 

Piedevām šādu 'datu ģenerātoru', prātīgāk ir rakstīt kāda citā valodā , kaut vai paskālā.

P.S. Vari uzrakstīt algoritmu, un palūgt lai kāds zinošāks, pārnes šamo uz paskālu/c++ etc..

Link to comment
Share on other sites

Izskatās ka atkritīs vajadzība pēc ģenerēšanas,bet vienalga paldies par idejām. Pasmēlos gatavus no šejienes. Dabūtais rezultāts no 1 839 388 rindu (436MB) XML: 210.8 sec (neko nerakstot db) Pašam jau izskatās ka būs ok,lai gan nav ne jausmas cik būtu normāli izspiest no tāda SAX bāzēta varianta.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...