use Cake\Collection\Collection as C; use CFPropertyList\CFPropertyList; $w = new Workflow(); $query = isset($argv[1]) ? trim($argv[1]) : false; //glob all textexpander files named group_... $snippets = (new C(glob(getenv('HOME') . '/Library/Application Support/TextExpander/Settings.textexpandersettings/group*.xml')))->map(function ($file) { return (new CFPropertyList($file))->toArray()['snippetPlists']; })->unfold()->filter(function ($s) { return strlen($s['abbreviation']) > 0; })->filter(function ($s) use($query) { if (!$query) { return true; } return (new C(['abbreviation', 'label', 'plainText']))->some(function ($k) use($s, $query) { return mb_stripos($s[$k], $query) !== false; }); }); if ($snippets->isEmpty()) { //404 if collection is empty $results = [['title' => '404 Not Found', 'icon' => false, 'valid' => 'yes']]; } else { //build results array $results = $snippets->map(function ($s) { return ['uid' => $s['uuidString'], 'arg' => $s['abbreviation'], 'title' => $s['label'] ? $s['label'] : $s['abbreviation'], 'subtitle' => $s['abbreviation'], 'icon' => false, 'valid' => 'yes']; })->toList(); } //set results $w->results = $results; //return alfred's xml echo $w->toXML();
<?php require_once __DIR__ . '/vendor/autoload.php'; use Alfred\Workflow; use Guzzle\Http\Client; $wf = new Workflow('com.ryanparman.workflow.packagist'); $http = new Client(); $int = 0; $query = isset($argv[1]) ? $argv[1] : "{query}"; $request = $http->get("https://packagist.org/search.json?q=" . urlencode($query)); $response = $request->send()->json(); foreach ($response['results'] as $result) { $int++; $wf->result(array('uid' => $result['name'] . time(), 'arg' => $result['url'], 'title' => $result['name'], 'subtitle' => $result['description'], 'icon' => __DIR__ . '/icon.png', 'valid' => 'yes', 'autocomplete' => 'autocomplete')); } if (count($wf->results) === 0) { $wf->result(array('uid' => 'none', 'arg' => $query, 'title' => 'No results', 'subtitle' => 'No results found.', 'icon' => __DIR__ . '/icon.png', 'valid' => 'no')); } echo $wf->toXML();