Страницы

Поиск по вопросам

Показаны сообщения с ярлыком link. Показать все сообщения
Показаны сообщения с ярлыком link. Показать все сообщения

понедельник, 6 января 2020 г.

Wordpress API для плагина

#json #wordpress #api #link


Нужно как-то сделать в плагине, чтобы при переходе по ссылке определенного типа отдавался JSON
где token - это код сгенерированный за алгоритмом текущего дня (этот код знает сервер
и отправитель)

method - это указатель метода для плагина   

Ссылка должна получится вида

http://domain.ru/wp-api/token/method?postdata=data


Я нашел частичный ответ 
тут

Но как читается эта штука, что это такое, и как ее доработать под меня. 

 add_rewrite_rule('^wp-api/pugs/?([0-9]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');


Готов все попробовать сделать сам, но просто объясните как сделать точку входа и
чтоб она работала.
    


Ответы

Ответ 1



Если я верно угадал в комментарии к вашему ответу, что вы на самом деле хотите сделать, то есть два варианта решения данной задачи. Первый - разрабатывать действительно свой API, как советуют по вашей ссылке, то есть точку входа для внешних источников запроса. Но это довольно громоздкий вариант, который вряд ли вам нужен. Второй - просто принимать некоторые запросы и в ответ на них слать некий ответ. В предыдущем ответе другим пользователем вам был дан в целом рабочий для такого решения совет, но, как по мне, более правильно будет поступить описанным ниже образом. Главным образом потому, что конкретно для асинхронных запросов именно от плагинов, а у вас наверняка такая задача и стоит, именно описанный ниже функционал и подходит (он находится в разделе Plugin API), в то время как предложенный другим пользователем вариант - это использование функционала редиректов, что совершенно неверно методологически. Функционал этот завязан на такой хук: wp_ajax_(action) / wp_ajax_nopriv_(action). Если коротко, то он работает "из коробки" для запросов, сформированных из админки, и с небольшим применением магии работает и для фронта сайта. Подробное описание, как это сделать, есть тут. Ключевых моментов тут три: Написать функцию, которая будет делать POST-запрос на адрес admin-ajax.php (адрес будет использоваться в т.ч. и для фронта). Написать колбек, который будет использоваться для ловли вашего запроса и ответа на него, который, в свою очередь, повесить на этот запрос с помощью упомянутого хука wp_ajax_(my_action) (часть в скобках меняется на ваше название). Если запрос нужно делать не только из админки, то повесить тот же колбек с помощью хука wp_ajax_nopriv_(action). Добавить на фронт js-объект myajax (название произвольно), в котором будете хранить адрес вашего эндпоинта, название запроса, ключ для проверки запроса на принадлежность к вашему сайту (wp_nonce, токен, но это не про ваш токен, а про токен конкретно для этого функционала) и другие нужные вам на фронте переменные.

Ответ 2



Посмотрите в сторону endpoint'ов в WordPress. Добавьте свой endpoint, например json. И через хук add_action( 'template_redirect', 'function' ); разбирайте полученный результат. get( 'json' ); if ( ! $json ) { return; } // Код для получения JSON // ..................... wp_send_json( $json ); } add_action( 'template_redirect', 'mihdan_template_redirect' ); ?>

четверг, 2 января 2020 г.

Выборочная линковка в GCC

#c #gcc #link


Как правильно организовать выборочную сборку программы в GCC?
Предположим имеется такой набор независимых друг от друга исходных файлов:

Vec2.c
Vec3.c
Mat3.c


, которые собираются в библиотэкуlibMegaSuperMath.a.
Ясен пень, линкуя такую библиотэку, мы включаем все ее содержимое в конечный исполняемый
модуль (или не включаем?).
Как организовать выборочную линковку, в случае, если программа, использующая такую
библиотэку не нуждается в некоторых из ее компонентов? Вырежет ли GCC неиспользуемые
структуры, функции и данные? Какие флаги оптимизации требуются для этого?
Приемлем ли в подобной ситуации подход, при котором отдельные "классы" библиотэки
собираются в объектные файлы, а инструкция сборки формируется на основании требующихся
"классов"? Типа как-то так:

Vec2.o
Vec3.o
Mat3.o


и

cc NewUberTurboProgramm.c Vec2.o Mat3.o -o Run.exe

    


Ответы

Ответ 1



Нет, библиотека не линкуется безусловно и целиком. Библиотека - это архив объектных файлов, из которого берутся только "нужные" объектные файлы. В "классическом" алгоритме линковки библиотек из библиотеки берутся те и только те объектные файлы, которые нужны на текущий момент. Линкер просматривает линкуемые компоненты последовательно, слева-направо, как они указаны в командной строке линкера. В процессе такого просмотра он поддерживает список ненайденных/неразрешенных на данный момент символов (в самом начале этот список состоит из просто символа main или его аналога). В процессе обработки слева-направо из очередной встреченной в командной строке библиотеки берутся те и только те объектные файлы, которые разрешают какие-то из не разрешенных на текущий момент символов. Таким образом изъятие кода из библиотеки делается с точностью до объектного файла. Так что ваше утверждение "линкуя такую библиотэку, мы включаем все ее содержимое в конечный исполняемый модуль" - не верно. Из этого также следует, что библиотеки в командной строке линкера лучше указывать где-то в конце - когда линкер уже знает весь список неразрешенных символов и, соответственно, возьмет из библиотеки все, что надо. Если указать библиотеку в командной строке слишком рано, то может получиться так, что линкер возьмет из нее не все, что нужно, ибо в этот момент он еще не знал все, что нужно. В частности, если указать библиотеку самой первой в командной строке, из нее не возьмется вообще ничего (если библиотека не предоставляет main). С прямым указанием отдельных объектных файлов в командной строке линкера ситуация иная: явно указанный объектный файл всегда безусловно целиком линкуется в программу, независимо от того, "нужен" ли он на этот момент или нет. В традиционном "классическом" линкере добиться линковки с точностью до функции можно только помещая каждую функцию в свой отдельный объектный файл. Но многие современные компиляторы и линкеры уже поддерживают линковку с точностью до отдельной функции без необходимости такого индивидуального разбрасывания функций по файлам. В GCC это делается через LTO - link-time optimizations.

четверг, 28 ноября 2019 г.

Ссылки на Viber, Whatsapp, Telegram

#link #href #telegram #whatsapp #viber


Как на сайт вставить ссылки на Viber, Whatsapp и Telegram, при клике на которые открывалось
приложение и сразу переходило на чат с указанным номером. Ну и соответственно учитывая
мобильные устройства.

С Viber получилось вот так:




Viber открывается он пишет ошибку "Действие не может быть выполнено".

Whatsapp с Telegram открывают программу но молчат вообще
    


Ответы

Ответ 1



Для Viber
телефон в формате +(код страны) номер. + заменить на %2B Для Telegram

Ответ 2



для Viber:


Ответ 3



Для Whatsapp


Ответ 4



Для whatsapp с сообщением:
Написать в WhatsApp (номер и текст который сразу ставится в поле ввода замените на свой, %20 это пробел) Для телеграма и вайбера уже написали ответы. P.S.: Ещё возможно у Вас не работает по той причине, что Вы пишете + перед номером телефона, этого делать НЕ нужно.

понедельник, 29 октября 2018 г.

Objective-C: проверка наличия файла

Загружаю zip файл в папку в моем приложении. Наблюдаю за прогрессом загрузки от 1% до 100% в моем label. После того, как label = 100% я не нахожу файл в папке. Он появляется спустя 50 секунд. Как я могу постоянно проверять наличие файла в течение 50 секунд, чтобы точно знать кода он появится в папке?
код загрузки
-(IBAction) downloadButton:(id)sender { if (_HighScore == 2) {
_url1 =[NSURL URLWithString:@"link2.zip"];
_downloadTask1 = [_session downloadTaskWithURL:_url1];
[_downloadTask1 resume]; } - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
if (downloadTask == _downloadTask1) { _documentsDirectory1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; _zipPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"2.zip"]; } dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (downloadTask == _downloadTask1) { NSData *urlData1 = [NSData dataWithContentsOfURL:_url1]; [urlData1 writeToFile:_zipPath1 atomically:YES];}
}); }
UPD
_documentsDirectory1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; _zipPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"2.zip"]; _destinationPath1 = [_documentsDirectory1 stringByAppendingPathComponent:@"MediaData"]; _fileExists1 = [[NSFileManager defaultManager] fileExistsAtPath:_zipPath1 isDirectory:false]; if( [SSZipArchive unzipFileAtPath:_zipPath1 toDestination:_destinationPath1] != NO ) { NSLog(@"Dilip Success"); }else{ NSLog(@"Dilip Error"); }


Ответ

как уже написал в комментарии, у вас скачивание происходит два раза - первый вы скачиваете через NSSession, и когда он закончил скачивать и выполнил
- (void)URLSession: downloadTask: didFinishDownloadingToURL:
вы скачиваете еще раз используя
[NSData dataWithContentsOfURL:_url1]
Что вам надо делать, в didFinishDownloadingToURL просто смотреть куда файл скачан и его оттуда брать. типа такого:
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSURL *documentsFolder = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *newLocation = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@/myCoolFile.txt", documentsFolder]];
NSError *error; [fileManager copyItemAtURL:location toURL:newLocation error:&error];
}