Jak usprawnić program i jego wynik wyświetlić w excelu?

Jak usprawnić program i jego wynik wyświetlić w excelu?
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

Witam!

Moje pytanie dotyczy programu utworzonego w oparciu o PHP i cURL, a dokładniej zastanawiam się w jaki sposób mógłbym usprawnić działanie programu i wynik przerzucić do tabeli w excelu? Wracając do programu, ma on za zadanie pobieranie informacji na temat wymagań gry. Potrzebuje do tego programu ponieważ tych danych jest ogrom, a muszę utworzyć bazę danych do projektu. Program chciałbym usprawnić pod takim względem, że jak pobiera mi te wszystkie dane ze strony, to są one podzielone osobno na procesor, GPU, RAM itd. i każda informacja jest wpisywana od razu do odpowiedniej komórki w excelu, czy coś takiego jest możliwe? Dziękuje za wszelkie rady.

Kopiuj
<?php

$curl = curl_init();

for( $i = 23800; $i<23850; $i++)
{
$url = "https://www.game-debate.com/games/index.php?g_id=$i&game=";

curl_setopt($curl, CURLOPT_URL, $url );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //dezaktywuje ssl
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //magazynuje 


$result = curl_exec($curl);



preg_match_all('!<div class="devDefSysReqMin">\n<ul class="devDefSysReqList">\n<li>(.*?)<\/li>.<li>\n(.*?).<\/li>\n<li>\n(.*?).<\/li>\n<li>\n(.*?)\n<\/li>\n<li>\n(.*?)\n<\/li>\n<li>(.*?)<\/li>\n<\/ul>\n<\/div>!', $result, $matches);


$CPU = array($matches[0]); //bez powtórzeń


print_r($CPU);

}



curl_close($curl);
?>
edytowany 1x, ostatnio: Krispi One
mr_jaro
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
0

nie jest możliwe, możesz oczywiście utworzyć, zapisać lub wysłać do pobrania plik. ale nie, że pisząc w php będziesz edytować okno excela no takiej magii nie ma.


It's All About the Game.
CR
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
  • Postów:113
0

Ale w sensie, że Excel jako silnik bazy danych? :D

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Możesz zrobić tak: program przez cURL pobiera dane, zapisuje do bazy danych, następnie w Excelu robisz sobie, np. przez ODBC połączenie z ta bazą i ciągniesz dane. Do tego jakieś makra, visual basic, etc. i można wszystko elegancko zrobić.


DRY > SOLID (nie bierz tego zbyt poważnie)
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

W sensie to wygląda tak, że tworzę bazę danych w MySQL, ale nie wiem jak zrobić program tak, żeby z takiego odcinka kodu:

Kopiuj
<div class="devDefSysReqMin">
<ul class="devDefSysReqList">
<li>MINIMUM PC REQUIREMENTS: 720P 30 FPS AT LOW SETTINGS</li>
<li>O/S: Windows 7 64-bit, 8.1 64-bit or Windows 10 64-bit</li>
<li>CPU: Intel core i3-2100T @ 2.5GHz/AMD FX 6100, or better</li>
<li>RAM: 8GB</li>
<li>GPU: NVIDIA GeForce GTX 650Ti 2GB, AMD Radeon HD 7750 2GB</li>
<li>DirectX: 11 Compatible video card or equivalent</li>
<li>Hard Drive: 25GB</li>
<li>Input: At least one Xbox-compatible/PlayStation-compatible controller</li>
<li>Online connection requirements: 256KBPS or faster Internet connection</li> </ul>
</div>

pobierał mi dane "Procesor", "Karta Graficzna" i było to podzielone w miarę estetycznie, w sensie przypominało kolumny i wiersze jak w excelu, bądź udało się od razu po pobraniu treści wrzucić ją do excela, bazy w MySQL itp.

Może zmienić język, na jakiś JavaScript i tam próbować zrobić ten web scrapping?

TR
Masz moją odpowiedź wyżej - zapisujesz do mysql, a potem w excelu ciągniesz dane z mysql-a
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 6 godzin
  • Postów:3866
0
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

Prawdę mówiąc opcja bazy danych była by dla mnie bardzo przydatna jeżeli by bardzo dobrze program działał i od razu wpisywał odpowiednią nazwę gry do odpowiednich podzespołów w sensie w odpowiednim rekordzie wszystko. Myślałem o Excelu jedynie pod względem bardziej technicznym żeby sprawdzić później te wszystkie dane :)

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Robisz tabelę SQL, i wrzucasz do niej dane, to jest dość proste. Kwestia tylko jak / w czym to chcesz przeglądać - można podpiąć do excela, można oglądać w jakimś kliencie bazy danych - np. darmowy MySQL Workbench, albo PhpMyAdmin, albo samemu sobie zrobić skrypty w PHP do pobierania rekordów z bazy i wyświetlania, opcji masz wiele.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 1x, ostatnio: TomRZ
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

Ogólnie to chciałbym żeby to działało tak, że pobiera mi dane do zmiennej np. Porc-Min przypisze mi do zmiennej $PROCMIN no i później tą zmienną włożę do bazy w MySQL, a przeglądać ją chcę na stronie, ponieważ muszę stworzyć stornę internetową która wyświetla te wszystkie dane które włożę do niej :) Jedyny problem który teraz napotkałem, to że jak mam pętle for to każdy preg_match_all tworzy mi się w nowej tabeli, a jest możliwość żeby kilka wynikó z preg_match_all było w jednej tabeli w sensie array() i można było się dostać do danego wyników przez numer co ma przypisany, jest to chyba numer rekordu w tablicy jeżeli się nie mylę?

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Zamiast robić skomplikowane długie wzorce zrób dwa proste:

Kopiuj
preg_match_all('/<ul\s+class="devDefSysReqList">(.*?)<\/ul>/ims', $result, $result2);
  
preg_match_all('/<li>(.*?)<\/li>/ims', $result2[1][0], $matches);
  
print_r($matches[1]);

DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 2x, ostatnio: TomRZ
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

Dziękuję Tom, świetny sposób na wyciąganie danych, ale napotkałem jeszcze jeden problem w trakcie, zacząłem wyciągać dane, i np. dane procesora nie zawsze są pod tym samym indeksem :/ czyli wychodzi na to ze zostało mi szukać przypadków i rozpisywać każdy z osobna? W załączniku przesyłam wynik z wykorzystaniem kodu.

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Musisz dokonywać dodatkowych detekcji, np. czy jest slowo CPU, etc. a i tak mogą się znaleźć nietypowe przypadki, plus nigdy nie masz gwarancji, że coś się nie zmieni na stronie z której ciągniesz dane.

Dlatego musisz mieć system powiadamiania o błędach i raportowania ich, oraz dwa: musisz mieć system który nie będzie za bardzo atakował strony tylko odpalał nie więcej niż np. jedno zapytanie na 3 sekundy. Inaczej w końcu ktoś się tam u nich zorientuje i zablokuje IP Twojego serwera, albo i gorzej - zgłosi abuse do firmy gdzie masz serwer lub do providera który dostarcza CI net, jeżeli robisz to np. z domu. Nie wolno spamować za bardzo takimi robotami.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 1x, ostatnio: TomRZ
KO
  • Rejestracja:prawie 7 lat
  • Ostatnio:27 dni
  • Postów:125
0

Dziękuję za radę, w takim razie zostało mi teraz stworzenie funkcji która opóźnia wykonania zapytań :) błędy i raportowanie ich to wyższa szkoła jazdy, tego nie potrafię, ale wystarczy mi tylko to, żeby przesyłało wszystko do odpowiedniej tableki w MySQL i będę szczęśliwy. program na ten moment wygląda tak:

Kopiuj

<?php
$curl = curl_init();



for ($i = 35275; $i < 35290; $i++){
$url = "https://www.game-debate.com/games/index.php?g_id=$i&game=";

curl_setopt($curl, CURLOPT_URL, $url );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //dezaktywuje ssl
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //magazynuje 


$result = curl_exec($curl);

preg_match_all('/<div class="devDefSysReqMin">(.*?)<\/div>/ims', $result, $result2);

// pętla system
if(preg_match_all('/<li>O.S:(.*?)<\/li>/ims', $result2[1][0], $OS)){
}
elseif(preg_match_all('/<li>OS:(.*?)<\/li>/ims', $result2[1][0], $OS)){    
}
elseif(preg_match_all('/<li>\sO.S:(.*?)<\/li>/ims', $result2[1][0], $OS)){    
}
elseif(preg_match_all('/<li>\sOS:(.*?)<\/li>/ims', $result2[1][0], $OS)){    
}
elseif(preg_match_all('/<li>\sO.S:(.*?)\s<\/li>/ims', $result2[1][0], $OS)){    
}
elseif(preg_match_all('/<li>\sOS:(.*?)\s<\/li>/ims', $result2[1][0], $OS)){    
}
//elseif(preg_match_all('/<li>Windows(.*?)<\/li>/ims', $result2[1][0], $OS)){    
//}
else{
    
    preg_match_all('/<li>Windows(.*?)<\/li>/ims', $result2[1][0], $OS);
}

//pętla procesor
if(preg_match_all('/<li>CPU:(.*?)<\/li>/ims', $result2[1][0], $CPU)){
}
elseif(preg_match_all('/<li>\sCPU:(.*?)<\/li>/ims', $result2[1][0], $CPU)){    
}
elseif(preg_match_all('/<li>\sCPU:(.*?)\s<\/li>/ims', $result2[1][0], $CPU)){    
}
elseif(preg_match_all('/<li>Processor:(.*?)<\/li>/ims', $result2[1][0], $CPU)){    
}
elseif(preg_match_all('/<li>\sProcessor:(.*?)<\/li>/ims', $result2[1][0], $CPU)){    
}
elseif(preg_match_all('/<li>\sProcessor:(.*?)\s<\/li>/ims', $result2[1][0], $CPU)){    
}
//elseif(preg_match_all('/<li>Intel(.*?)<\/li>/ims', $result2[1][0], $CPU)){
//}
else{
    
    preg_match_all('/<li>Intel(.*?)<\/li>/ims', $result2[1][0], $CPU);
}

//pętla RAM
if(preg_match_all('/<li>RAM:(.*?)<\/li>/ims', $result2[1][0], $RAM)){
}
elseif(preg_match_all('/<li>\sRAM:(.*?)<\/li>/ims', $result2[1][0], $RAM)){    
}
elseif(preg_match_all('/<li>\sRAM:(.*?)\s<\/li>/ims', $result2[1][0], $RAM)){    
}
elseif(preg_match_all('/<li>Memory:(.*?)<\/li>/ims', $result2[1][0], $RAM)){    
}
elseif(preg_match_all('/<li>\sMemory:(.*?)<\/li>/ims', $result2[1][0], $RAM)){    
}
elseif(preg_match_all('/<li>\sMemory:(.*?)\s<\/li>/ims', $result2[1][0], $RAM)){    
}
//elseif(preg_match_all('/<li>(.*?)RAM<\/li>/ims', $result2[1][0], $RAM)){    
//}
else{
   
    preg_match_all('/<li>(.*?)RAM<\/li>/ims', $result2[1][0], $RAM);
}

//pętla GPU
if(preg_match_all('/<li>GPU:(.*?)<\/li>/ims', $result2[1][0], $GPU)){
}
elseif(preg_match_all('/<li>\sGPU:(.*?)<\/li>/ims', $result2[1][0], $GPU)){    
}
elseif(preg_match_all('/<li>\sGPU:(.*?)\s<\/li>/ims', $result2[1][0], $GPU)){    
}
elseif(preg_match_all('/<li>Video:(.*?)<\/li>/ims', $result2[1][0], $GPU)){    
}
elseif(preg_match_all('/<li>\sVideo:(.*?)<\/li>/ims', $result2[1][0], $GPU)){    
}
elseif(preg_match_all('/<li>\sVideo:(.*?)\s<\/li>/ims', $result2[1][0], $GPU)){    
}
//elseif(preg_match_all('/<li>NVidia(.*?)<\/li>/ims', $result2[1][0], $GPU)){    
//}
else{
    preg_match_all('/<li>NVidia(.*?)<\/li>/ims', $result2[1][0], $GPU);
}

//pętla HDD
if(preg_match_all('/<li>Hard\sDrive:(.*?)<\/li>/ims', $result2[1][0], $HDD)){
}
elseif(preg_match_all('/<li>\sHard\sDrive:(.*?)<\/li>/ims', $result2[1][0], $HDD)){    
}
elseif(preg_match_all('/<li>\sHard\sDrive:(.*?)\s<\/li>/ims', $result2[1][0], $HDD)){    
}
//elseif(preg_match_all('/<li>Storage:(.*?)<\/li>/ims', $result2[1][0], $HDD)){    
//}
else{
    preg_match_all('/<li>Storage:(.*?)<\/li>/ims', $result2[1][0], $HDD);
}

print_r($OS);
print_r($CPU);
print_r($GPU);
print_r($RAM);
print_r($HDD);

}

?>

I właśnie zastanawiam się, jak zrobić taki myk, żeby za każdym wykonaniem pętli, wypełniała mi się tabela w MySQL, służy do tego funkcja insert into jeżeli się nie mylę, jedyny problem jaki mam to z zalogowaniem się do bazy i wybraniem tabeli której ma używać :) A jeżeli chodzi o tą funkcję opóźniającą, to jest na to jakaś konkretna komenda?

TR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:700m n.p.m.
  • Postów:677
0

Można to zrobić lepiej

Kopiuj
preg_match_all('/<ul\s+class="devDefSysReqList">(.*?)<\/ul>/ims', $result, $result2);
  
preg_match_all('/<li>(.*?)<\/li>/ims', $result2[1][0], $matches);

foreach ($matches[1] as &$found) {


}

I teraz w pętli analizujesz $found

Do opóźnienia możesz użyć funkcji sleep - np. sleep(3) uśpi program na 3 sekundy.


DRY > SOLID (nie bierz tego zbyt poważnie)
edytowany 2x, ostatnio: TomRZ
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)