1. 云栖社区>
  2. PHP教程>
  3. 正文

Creating useful Command Line (cli) Apps with PHP

作者:用户 来源:互联网 时间:2017-12-01 19:43:40

Creating useful Command Line (cli) Apps with PHP - 摘要: 本文讲的是Creating useful Command Line (cli) Apps with PHP, In this tutorial, we are going to build a command line app with PHP . The app we are going to build is going to receiv

In this tutorial, we are going to build a command line app with PHP . The app we are going to build is going to receive certain keywords and optionally a folder and file extensions and it will store the files that correspond to the first page of Google search results for your keywords and for the file extensions you request on your storage drive. In the meantime, we will also show you how to work PHP’s built-in DOMDocument class. We called that script Getty because it GETs files.

Creating useful Command Line (cli) Apps with PHP

DOWNLOAD CODE

Getty

We print some instructions as to how to use the app in the command line:

<?phpecho "--------- This program will search Google for files matching certain keywords and file types and extract the first result page ---------/r/n"."Files are saved into a general folder where your script is by default. By default, the script extracts pdf and pptx files./r/n"."Mandatory input:/r/nKeywords - text that you want the files to contain./r/n"."Optional input:/r/nFolder to save - separated from the keywords with a | (pipe) sign/r/nFile types to extract separated from the folder with | and each file type separated with another through &"."/r/nExample inputs:/r/nInformation Systems/r/nInformation Systems|info-sys/r/nInformation Systems|info-sys|pdf&pptx&txt&ppt/r/n"."passwords|pass|txt/r/nEnter input:/r/n"; <?phpecho"--------- This program will search Google for files matching certain keywords and file types and extract the first result page ---------/r/n"."Files are saved into a general folder where your script is by default. By default, the script extracts pdf and pptx files./r/n"."Mandatory input:/r/nKeywords - text that you want the files to contain./r/n"."Optional input:/r/nFolder to save - separated from the keywords with a | (pipe) sign/r/nFile types to extract separated from the folder with | and each file type separated with another through &"."/r/nExample inputs:/r/nInformation Systems/r/nInformation Systems|info-sys/r/nInformation Systems|info-sys|pdf&pptx&txt&ppt/r/n"."passwords|pass|txt/r/nEnter input:/r/n";

We receive a single input line from the input stream and turn it into an array of values, as much values as we have separated by the pipe character in the input:

$line = explode("|", trim(fgets(STDIN))); $line=explode("|",trim(fgets(STDIN)));

Then we set the particular array elements into variables according to our expected input order, if a value is missing we set it to null:

$folder = (isset($line[1])) ? $line[1] : null;$keywords = (isset($line[0])) ? $line[0] : null;$fileTypes = (isset($line[2])) ? $line[2] : null; $folder=(isset($line[1]))?$line[1]:null;$keywords=(isset($line[0]))?$line[0]:null;$fileTypes=(isset($line[2]))?$line[2]:null;

If the user has provided any keywords we execute the function that will store the files from Google:

if ($keywords) {getFrontPageFiles($keywords, $folder, $fileTypes);} if($keywords){getFrontPageFiles($keywords,$folder,$fileTypes);}

Inside the function’s getFrontPageFiles body we set the $fileTypes variable to hold “pdf&pptx” if it is not already filled and set the folder where the files will be saved to general (only if the user has not provided us with a folder name). Aditionally, we create an array of file types by exploding the string where the character & (ampersand) is found.

function getFrontPageFiles($keywords, $folder, $fileTypes) {$fileTypes = (!$fileTypes) ? "pdf&pptx" : $fileTypes;$fileTypes = explode("&", $fileTypes);$folder = (!$folder) ? "general" : $folder; functiongetFrontPageFiles($keywords,$folder,$fileTypes){$fileTypes=(!$fileTypes)?"pdf&pptx":$fileTypes;$fileTypes=explode("&",$fileTypes);$folder=(!$folder)?"general":$folder;

We loop over each file type and perform a Google search query for the provided keywords and each of the specific file types.

foreach ($fileTypes as $fileType) {$pdf = file_get_contents("https://www.google.bg/search?q=" . urlencode($keywords . " filetype:$fileType")); foreach($fileTypesas$fileType){$pdf=file_get_contents("https://www.google.bg/search?q=".urlencode($keywords." filetype:$fileType"));

We create a new DOMDocument class and import the string with the Google search results in it. Then, we get the search results container div and save it in a variable.

$doc = new DOMDocument();$doc->loadHTML($pdf);$container = $doc->getElementById("center_col"); $doc=newDOMDocument();$doc->loadHTML($pdf);$container=$doc->getElementById("center_col");

If the directory where the user wants to save the files does not exist – we create it.

if (!is_dir($folder)) {mkdir($folder);} if(!is_dir($folder)){mkdir($folder);}

Now, we loop over each h3 element within our container div, get its first child (which is an anchor/<a> tag) and get its href attribute. This represents the link to the file of the type that we searched for. Therefore, we get its contents; get the name of the file by parsing the href attribute (the link) and save the file in the folder the user selected or the default folder.

After all files of a particular file type are saved we print to the output stream how many files of what file type were saved and where they were saved.

$totalFiles = 0;foreach ($container->getElementsByTagName("h3") as $urlContainer) {$url = $urlContainer->firstChild;$href = $url->getAttribute("href");$file = file_get_contents("https://google.com" . $href);$fileName = explode("/", $href);$fileName = $fileName[count($fileName) - 1];$fileName = explode("&", $fileName)[0];file_put_contents("$folder/$fileName", $file);++$totalFiles;}echo "Saved $totalFiles files of type $fileType into the path $folder that matched the keywords: $keywords/r/n";} $totalFiles=0;foreach($container->getElementsByTagName("h3")as$urlContainer){$url=$urlContainer->firstChild;$href=$url->getAttribute("href"); $file=file_get_contents("https://google.com".$href); $fileName=explode("/",$href);$fileName=$fileName[count($fileName)-1];$fileName=explode("&",$fileName)[0];file_put_contents("$folder/$fileName",$file);++$totalFiles;} echo"Saved $totalFiles files of type $fileType into the path $folder that matched the keywords: $keywords/r/n";}

Now we can run that script by opening up our Command Line or Terminal, navigating to the folder where it is placed and typing php Getty.php or the name you gave to the script:

Figure 1: Using the Getty script

Creating useful Command Line (cli) Apps with PHP

We have searched for PowerPoint presentations related to IT security and we downloaded 10 ppt and 10 pptx files on the topic in our chosen folder.

Figure 2: Downloaded presentations relating to IT security

Creating useful Command Line (cli) Apps with PHP

Conclusion

I hope Getty will prove useful to you, it certainly helps me when I need to skim through files on a particular topic quickly. What do you think of Getty? What kind of command line applications do you want to make or have made?

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。