Евангелие от кода — реализация генератора имен переменных

задняя часть Python GitHub Mac

После недавней смены работы я уже несколько месяцев пишу о своем бизнесе. После того, как потребности закончились, найдите то, о чем вам нравится писать, и измените свой вкус.

Самая сложная часть кодирования — это присвоение имен переменным. Так что просто напишите генератор переменных.

Демонстрация выглядит следующим образом:

Идеи реализации:

Используйте самые известные инструменты повышения производительности на своем MacAlfred. использоватьAlfredпозвони на местныйpythonСкрипт с помощью модуля http запрашивает удаленный интерфейс API.

После того, как удаленный API получит символы запроса, сначала используйте结巴分词, сегментируйте предложение запроса, а затем вызовите перевод API Youdao Dictionary и верните его после объединения.

В конце концов, одним нажатием можно занести результат в нашу IDE, что сокращает массу операций, и мама больше не будет переживать, что я не могу получить имя переменной.

Реализация API:

Поскольку я говорю другой вкус, я определенно не буду использовать «Spring mvc» для API.

В основном используется «vertx», полностью асинхронная библиотека Java, основанная на «netty». Заинтересованные студенты могут обратиться кvartx.io.

Управляйте жизненным циклом объектов с помощью Spring boot.

Используйте «причастие заикания» для токенизации запроса.

Используйте кеш гуавы для кэширования результатов запроса. Зачем кешировать? Основная причина в том, что API перевода Youdao платный, после проверки и кэширования результатов можно немного сэкономить.

А зачем использовать локальный кеш вместо Redis? Потому что Redis от Alibaba Cloud стоит 25 юаней в месяц. Построить самому? Всего на моем vps всего 1 ГБ оперативной памяти.

В конечном счете, архитектурный проект должен учитывать реальную ситуацию, и слепо полагаться на высокие технологии не рекомендуется. Подгонка самая лучшая.

vertx-web

написалnettyстуденты знают, чтоnettyБизнес-логика написана наhandlerсередина.

такой жеvertxтакже похож наnettyтакже использоватьhandlerдля обработки запроса.

vertx направляет запросы к разным обработчикам через класс Router. Итак, давайте посмотрим непосредственно на код:

@Component
public class StaticServer extends AbstractVerticle {

	@Autowired
	private VariableHandler variableHandler;

	@Override
	public void start() throws Exception {
		Router router = Router.router(vertx);
		router.route().handler(BodyHandler.create());
		router.post("/api/hump").handler(routingContext ->variableHandler.get(routingContext));
		vertx.createHttpServer().requestHandler(router::accept).listen(8080);

	}
}

мы кладемVariableHandlerОн привязан к почтовому методу uri ‘/api/hump’. После запуска сервер будет прослушивать порт 8080. Для работы vertx-web не требуется такой контейнер, как tomcat.

RestTemplate

Мы обычно используемHttpclientВызовите интерфейс http в своем коде. Но я думаю, что пакет HTTPClient не очень хорош. мы можем напрямую использоватьSpring boot webПредоставлен RestTemplate (действительно ароматный). Посмотрите прямо на код:

private ApiResponse requestYoudao(String param){
	long timeMillis = System.currentTimeMillis();
	String salt = String.valueOf(timeMillis);
	String sign = Md5Utils.md5(appKey + param + salt + secretKey);
	MultiValueMap<String,String> bodyMap = new LinkedMultiValueMap<>();
	bodyMap.add("q",param);
	bodyMap.add("from","auto");
	bodyMap.add("to","auto");
	bodyMap.add("appKey",appKey);
	bodyMap.add("salt",salt);
	bodyMap.add("sign",sign);
	MultiValueMap<String,String> headersMap = new LinkedMultiValueMap<>();
	HttpEntity<MultiValueMap<String, String>> requestEntity  = new HttpEntity<>(bodyMap, headersMap);
	return restTemplate.postForObject(url, requestEntity,ApiResponse.class);
}

Guava

Guava — это класс базовой библиотеки Java, предоставляемый Google.Если вы можете использовать Guava, эффективность вашей разработки удвоится. В этом проекте в основном используются локальный кеш и строковые операции, предоставляемые Guava:

Использование кеша Guava очень просто, если смотреть на код напрямую:

@Autowired
   private Cache<String,ApiResponse> cache;

   private ApiResponse cachedResponse(String param){
    try {

           return cache.get(param, () -> requestYoudao(param));
       }catch (Exception e){
        log.error("error",e);
       }
       return null;
   }

Guava предоставляет множество мощных манипуляций со строками. В частности, он обеспечивает мощную поддержку символов подчеркивания строк, использования заглавных букв и верблюжьего регистра. Это позволяет нашему API предоставлять различные стили переменных форм. Давайте посмотрим непосредственно на генерацию:


switch (status){
    case Constants.LOWER_CAMEL:
        return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,underline);
    case Constants.LOWER_HYPHEN:
        return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN,underline);
    case Constants.LOWER_UNDERSCORE:
        return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_UNDERSCORE,underline);
    case Constants.UPPER_CAMEL:
        return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,underline);
    case Constants.UPPER_UNDERSCORE:
        return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE,underline);
    default:
        return  CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,underline);
}

Выше приведена реализация интерфейса API.

скрипт питона

Локальный скрипт на Python чрезвычайно прост:


# -*- coding:utf-8 -*-
import httplib,urllib,json

url = 'xilidou.com'


def query(q,status=0):
    response = get(q,status)
    dates = json.loads(response.read())
    items = list()
    for date in dates:
        item = {}
        item['title'] = date.encode('utf-8')
        item['arg'] = date.encode('utf-8')
        item['subtitle'] = '回车复制'
        item['icon'] = getIcon()
        items.append(item)
    jsonBean = {}
    jsonBean['items'] = items
    json_str = json.dumps(jsonBean)
    if json_str:
        print json_str
    return str


def get(q,status=0):
    parameters= dict()
    parameters['q'] = q
    parameters['status'] = status

    parameters = urllib.urlencode(parameters)
    headers = {"Content-type": "application/x-www-form-urlencoded"}

    conn = httplib.HTTPSConnection(url)
    conn.request('POST','/api/hump',parameters,headers)
    response = conn.getresponse()
    return response

def getIcon():
    icon = {}
    icon['path'] = 'icon.png'
    return icon


if __name__ == '__main__':
    query('中文')

Сделайте две вещи:

  • Получите строку запроса, введенную пользователем, от Альфреда.
  • Вызовите удаленный интерфейс API, чтобы получить возвращаемый формат, а затем распечатайте результат.

Alfred

Вы можете скачать код github напрямую. находится в папке pythonhump.alfredworkflowДвойной клик. установлен на вашем Mac.

Предпосылка заключается в том, что вы установили afred на свой Mac и платите, чтобы стать пользователем премиум-класса.

наконец-то

Адрес старых правил на гитхабе:GitHub.com/tune центр 007…

Адрес загрузки рабочего процесса:скачать

Я также разработал рабочий процесс, который использует alfred для прямого запроса словаря Youdao. Эффект следующий:

图片

Адрес загрузки следующий:у-у-у-у. xilidu.com/2017/10/24/…

Добро пожаловать в мой публичный аккаунт WeChat:
二维码